mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 20:51:17 +08:00
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:
parent
85b20612e7
commit
fde155a75b
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
31
gcc/testsuite/g++.dg/gomp/pr35328.C
Normal file
31
gcc/testsuite/g++.dg/gomp/pr35328.C
Normal 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)
|
||||
;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user