aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-03-30 20:38:36 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-03-30 20:38:36 +0200
commit9d620422f5ba32ae0dc1daf47da5382f876408f5 (patch)
tree60d00170918b6712fb92a72b22f94ec9ec9c6361 /gcc
parent85d367756d15aee2a4e40ac147fc567bad949a27 (diff)
downloadgcc-9d620422f5ba32ae0dc1daf47da5382f876408f5.zip
gcc-9d620422f5ba32ae0dc1daf47da5382f876408f5.tar.gz
gcc-9d620422f5ba32ae0dc1daf47da5382f876408f5.tar.bz2
re PR c++/84791 (ICE with broken OpenMP reduction clause)
PR c++/84791 * semantics.c (finish_omp_reduction_clause): If OMP_CLAUSE_REDUCTION_PLACEHOLDER is error_mark_node, return true even if processing_template_decl. * g++.dg/gomp/pr84791.C: New test. From-SVN: r258981
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/semantics.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr84791.C15
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 77c729c..13b2435 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2018-03-30 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/84791
+ * semantics.c (finish_omp_reduction_clause): If
+ OMP_CLAUSE_REDUCTION_PLACEHOLDER is error_mark_node, return true
+ even if processing_template_decl.
+
2018-03-29 David Malcolm <dmalcolm@redhat.com>
PR c++/84269
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 035e395..eef9e2f 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5623,7 +5623,11 @@ finish_omp_reduction_clause (tree c, bool *need_default_ctor, bool *need_dtor)
return false;
}
else if (processing_template_decl)
- return false;
+ {
+ if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) == error_mark_node)
+ return true;
+ return false;
+ }
tree id = OMP_CLAUSE_REDUCTION_PLACEHOLDER (c);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e17846e..31d0f01 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-30 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/84791
+ * g++.dg/gomp/pr84791.C: New test.
+
2018-03-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/84931
diff --git a/gcc/testsuite/g++.dg/gomp/pr84791.C b/gcc/testsuite/g++.dg/gomp/pr84791.C
new file mode 100644
index 0000000..4e6d3b8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr84791.C
@@ -0,0 +1,15 @@
+// PR c++/84791
+// { dg-do compile }
+
+typedef int I;
+
+template <int>
+void
+foo ()
+{
+ I i;
+ #pragma omp parallel reduction (I::I: i) // { dg-error "'I' is not a class, namespace, or enumeration" "" { target c++11 } }
+ ; // { dg-error "'I' is not a class or namespace" "" { target c++98_only } .-1 }
+}
+
+template void foo<0> ();