re PR c++/35328 (ICE with firstprivate variable with invalid destructor)

PR c++/35328
	* semantics.c (finish_omp_clauses): Look through NOP_EXPR even
	if errorcount.

	* g++.dg/gomp/pr35328.C: New test.

From-SVN: r133087
This commit is contained in:
Jakub Jelinek 2008-03-10 20:48:20 +01:00 committed by Jakub Jelinek
parent 85b20612e7
commit fde155a75b
4 changed files with 40 additions and 2 deletions

View File

@ -1,5 +1,9 @@
2008-03-10 Jakub Jelinek <jakub@redhat.com>
PR c++/35328
* semantics.c (finish_omp_clauses): Look through NOP_EXPR even
if errorcount.
PR c++/35337
* semantics.c (finish_omp_clauses): Use %qD instead of %qE for
DECL_P in not a variable and appears more than once error messages.

View File

@ -3667,7 +3667,7 @@ finish_omp_clauses (tree clauses)
complete_ctor_identifier,
t, inner_type, LOOKUP_NORMAL);
if (targetm.cxx.cdtor_returns_this ())
if (targetm.cxx.cdtor_returns_this () || errorcount)
/* Because constructors and destructors return this,
the call will have been cast to "void". Remove the
cast here. We would like to use STRIP_NOPS, but it
@ -3689,7 +3689,7 @@ finish_omp_clauses (tree clauses)
t = build_special_member_call (t, complete_dtor_identifier,
NULL, inner_type, LOOKUP_NORMAL);
if (targetm.cxx.cdtor_returns_this ())
if (targetm.cxx.cdtor_returns_this () || errorcount)
/* Because constructors and destructors return this,
the call will have been cast to "void". Remove the
cast here. We would like to use STRIP_NOPS, but it

View File

@ -1,5 +1,8 @@
2008-03-10 Jakub Jelinek <jakub@redhat.com>
PR c++/35328
* g++.dg/gomp/pr35328.C: New test.
PR c++/35337
* g++.dg/gomp/pr35337.C: New test.

View File

@ -0,0 +1,31 @@
// PR c++/35328
// { dg-do compile }
// { dg-options "-fopenmp" }
struct A
{
~A ()(); // { dg-error "declared as function returning a function" }
};
struct B
{
B ()(); // { dg-error "declared as function returning a function" }
};
struct C
{
C ();
C (const C &)(); // { dg-error "declared as function returning a function" }
};
void
foo ()
{
A a;
B b;
C c;
#pragma omp parallel firstprivate (a)
;
#pragma omp parallel private (b)
;
#pragma omp parallel firstprivate (c)
;
}