]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c++/84791 (ICE with broken OpenMP reduction clause)
authorJakub Jelinek <jakub@redhat.com>
Fri, 22 Jun 2018 21:02:52 +0000 (23:02 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 22 Jun 2018 21:02:52 +0000 (23:02 +0200)
Backported from mainline
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.

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

From-SVN: r261943

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr84791.C [new file with mode: 0644]

index 5e4231ab8c1d47dfe57f1226cf377885baaa7de4..9eff156e8aab7514fb4b0b2a8474fd639180f5f1 100644 (file)
@@ -1,6 +1,13 @@
 2018-06-22  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       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-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/85076
index d8c4f011526ca4223fff3fa03d30a62c52f095a4..52ca2a53efc08cfd343015651892be6179770372 100644 (file)
@@ -5638,7 +5638,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);
 
index d3eb5b9300979db22cddf88688515140108fa2ae..e690c88bc1f5eda49d68586cd4e77c1f49e11ed3 100644 (file)
@@ -1,6 +1,11 @@
 2018-06-22  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2018-03-30  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/84791
+       * g++.dg/gomp/pr84791.C: New test.
+
        2018-03-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/85095
diff --git a/gcc/testsuite/g++.dg/gomp/pr84791.C b/gcc/testsuite/g++.dg/gomp/pr84791.C
new file mode 100644 (file)
index 0000000..4e6d3b8
--- /dev/null
@@ -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> ();