summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c3
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr31598.C59
-rw-r--r--gcc/tree-inline.c2
6 files changed, 74 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b99d5272091..bc48621e093 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
2007-04-26 Jakub Jelinek <jakub@redhat.com>
+ PR c++/31598
+ * tree-inline.c (copy_body_r): Don't touch TREE_TYPE of OMP_CLAUSE.
+
PR tree-optimization/30558
* tree-eh.c (lower_eh_filter): If EH_FILTER_MUST_NOT_THROW
clear this_state.prev_try.
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index cb9840f4342..6fea3c6b649 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2007-04-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/31598
+ * semantics.c (finish_omp_clauses): Don't create CP_OMP_CLAUSE_INFO
+ for type dependent OMP_CLAUSE_DECLs.
+
2007-04-24 Mark Mitchell <mark@codesourcery.com>
PR c++/31338
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index c683ba298ff..a920bfb6ce7 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -3627,7 +3627,8 @@ finish_omp_clauses (tree clauses)
Save the results, because later we won't be in the right context
for making these queries. */
if (CLASS_TYPE_P (inner_type)
- && (need_default_ctor || need_copy_ctor || need_copy_assignment))
+ && (need_default_ctor || need_copy_ctor || need_copy_assignment)
+ && !type_dependent_expression_p (t))
{
int save_errorcount = errorcount;
tree info;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d75284ce407..4667c9da9b7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2007-04-26 Jakub Jelinek <jakub@redhat.com>
+ PR c++/31598
+ * g++.dg/gomp/pr31598.C: New test.
+
PR tree-optimization/30558
* g++.dg/gomp/pr30558.C: New test.
diff --git a/gcc/testsuite/g++.dg/gomp/pr31598.C b/gcc/testsuite/g++.dg/gomp/pr31598.C
new file mode 100644
index 00000000000..3ebcead5ac9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr31598.C
@@ -0,0 +1,59 @@
+// PR c++/31598
+// { dg-do compile }
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+// Contributed by Theodore.Papadopoulo
+// 16 Apr 2007 <Theodore.Papadopoulo@sophia.inria.fr>
+
+int i;
+template <typename> struct A { A() {} };
+template <typename> struct C { C() { i++; } C(const C &) { i += 2; } };
+struct D { D() {} };
+
+struct M { typedef double E; };
+
+template <typename T>
+struct R
+{
+ R()
+ {
+ typedef A<typename T::E> B;
+ B b;
+ #pragma omp parallel for firstprivate(b) schedule(guided)
+ for (int t = 0; t < 10; ++t)
+ ;
+ }
+};
+
+template <typename T>
+struct S
+{
+ S()
+ {
+ typedef C<typename T::E> B;
+ B b;
+ #pragma omp parallel for firstprivate(b)
+ for (int t = 0; t < 10; ++t)
+ ;
+ }
+};
+
+struct U
+{
+ U()
+ {
+ D b;
+ #pragma omp parallel for firstprivate(b)
+ for (int t = 0; t < 10; ++t)
+ ;
+ }
+};
+
+int
+main ()
+{
+ R<M> r;
+ S<M> s;
+ U u;
+ return 0;
+}
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index ff76b7557c1..77d38646054 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -731,7 +731,7 @@ copy_body_r (tree *tp, int *walk_subtrees, void *data)
(NULL_TREE,
id->eh_region_offset + TREE_INT_CST_LOW (TREE_OPERAND (*tp, 0)));
- if (!GIMPLE_TUPLE_P (*tp))
+ if (!GIMPLE_TUPLE_P (*tp) && TREE_CODE (*tp) != OMP_CLAUSE)
TREE_TYPE (*tp) = remap_type (TREE_TYPE (*tp), id);
/* The copied TARGET_EXPR has never been expanded, even if the
OpenPOWER on IntegriCloud