Commit fde155a7 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 85b20612
2008-03-10 Jakub Jelinek <jakub@redhat.com> 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 PR c++/35337
* semantics.c (finish_omp_clauses): Use %qD instead of %qE for * semantics.c (finish_omp_clauses): Use %qD instead of %qE for
DECL_P in not a variable and appears more than once error messages. DECL_P in not a variable and appears more than once error messages.
......
...@@ -3667,7 +3667,7 @@ finish_omp_clauses (tree clauses) ...@@ -3667,7 +3667,7 @@ finish_omp_clauses (tree clauses)
complete_ctor_identifier, complete_ctor_identifier,
t, inner_type, LOOKUP_NORMAL); t, inner_type, LOOKUP_NORMAL);
if (targetm.cxx.cdtor_returns_this ()) if (targetm.cxx.cdtor_returns_this () || errorcount)
/* Because constructors and destructors return this, /* Because constructors and destructors return this,
the call will have been cast to "void". Remove the the call will have been cast to "void". Remove the
cast here. We would like to use STRIP_NOPS, but it cast here. We would like to use STRIP_NOPS, but it
...@@ -3689,7 +3689,7 @@ finish_omp_clauses (tree clauses) ...@@ -3689,7 +3689,7 @@ finish_omp_clauses (tree clauses)
t = build_special_member_call (t, complete_dtor_identifier, t = build_special_member_call (t, complete_dtor_identifier,
NULL, inner_type, LOOKUP_NORMAL); NULL, inner_type, LOOKUP_NORMAL);
if (targetm.cxx.cdtor_returns_this ()) if (targetm.cxx.cdtor_returns_this () || errorcount)
/* Because constructors and destructors return this, /* Because constructors and destructors return this,
the call will have been cast to "void". Remove the the call will have been cast to "void". Remove the
cast here. We would like to use STRIP_NOPS, but it cast here. We would like to use STRIP_NOPS, but it
......
2008-03-10 Jakub Jelinek <jakub@redhat.com> 2008-03-10 Jakub Jelinek <jakub@redhat.com>
PR c++/35328
* g++.dg/gomp/pr35328.C: New test.
PR c++/35337 PR c++/35337
* g++.dg/gomp/pr35337.C: New test. * g++.dg/gomp/pr35337.C: New test.
// 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)
;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment