From: Jakub Jelinek Date: Tue, 21 Mar 2006 18:35:20 +0000 (+0100) Subject: re PR c++/26690 (ICE in get_callee_fndecl, at tree.c:5806 with OpenMP) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3c9bb46ee9c2f34a129c6c4489778092de2a220c;p=gcc.git re PR c++/26690 (ICE in get_callee_fndecl, at tree.c:5806 with OpenMP) PR c++/26690 * tree.c (get_callee_fndecl): If CALL is error_mark_node, return it immediately. * g++.dg/gomp/pr26690-1.C: New test. * g++.dg/gomp/pr26690-2.C: New test. From-SVN: r112253 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4e910bc13a7..58504cf91e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-03-21 Jakub Jelinek + + PR c++/26690 + * tree.c (get_callee_fndecl): If CALL is error_mark_node, + return it immediately. + 2006-03-21 Michael Matz * genautomata.c (, num_out_arcs, presence_signature): diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8b5095299b4..2c983ad09da 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-03-21 Jakub Jelinek + + PR c++/26690 + * g++.dg/gomp/pr26690-1.C: New test. + * g++.dg/gomp/pr26690-2.C: New test. + 2006-03-20 Jeff Law * gcc.dg/tree-ssa/pr21829.c: New test. diff --git a/gcc/testsuite/g++.dg/gomp/pr26690-1.C b/gcc/testsuite/g++.dg/gomp/pr26690-1.C new file mode 100644 index 00000000000..9efd8d45ee9 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr26690-1.C @@ -0,0 +1,15 @@ +// PR c++/26690 +// { dg-do compile } + +struct A +{ // { dg-error "A::A\\(const A&\\)" } + A (int); // { dg-error "candidates" } +}; + +void +foo () +{ + A a(0); +#pragma omp parallel private (a) // { dg-error "no matching function" } + ; +} diff --git a/gcc/testsuite/g++.dg/gomp/pr26690-2.C b/gcc/testsuite/g++.dg/gomp/pr26690-2.C new file mode 100644 index 00000000000..4ebf677cd08 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr26690-2.C @@ -0,0 +1,16 @@ +// PR c++/26690 +// { dg-do compile } + +struct A +{ + A (int x = 6); // { dg-error "A::A\\(int\\)" } + A (long long x = 12LL); // { dg-error "candidates" } +}; + +void +foo () +{ + A a(6); +#pragma omp parallel private (a) // { dg-error "call of overloaded" } + ; +} diff --git a/gcc/tree.c b/gcc/tree.c index d49b3ba5edd..0c958e8d65b 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5801,6 +5801,9 @@ get_callee_fndecl (tree call) { tree addr; + if (call == error_mark_node) + return call; + /* It's invalid to call this function with anything but a CALL_EXPR. */ gcc_assert (TREE_CODE (call) == CALL_EXPR);