]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp: Fix ICE on #pragma omp parallel master in template [PR94477]
authorJakub Jelinek <jakub@redhat.com>
Fri, 3 Apr 2020 22:35:41 +0000 (00:35 +0200)
committerJakub Jelinek <jakub@redhat.com>
Tue, 7 Apr 2020 19:01:13 +0000 (21:01 +0200)
The following testcase ICEs, because for parallel combined with some
other construct we initialize the omp_parallel_combined_clauses pointer
and expect the construct combined with it to clear it after it no longer
needs it, but OMP_MASTER didn't do that.

2020-04-04  Jakub Jelinek  <jakub@redhat.com>

PR c++/94477
* pt.c (tsubst_expr) <case OMP_MASTER>: Clear
omp_parallel_combined_clauses.

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

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

index 324e133a1250565ea330791b48fc3ba01e58d805..ae33956b867f7036e365480e9f05d9e609700bb5 100644 (file)
@@ -1,6 +1,12 @@
 2020-04-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2020-04-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/94477
+       * pt.c (tsubst_expr) <case OMP_MASTER>: Clear
+       omp_parallel_combined_clauses.
+
        2020-03-30  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/94385
index bc572ac51fb16650be61fffe3d7e66a4ea1d0df5..7f51f70c71ad10f3926a66c5b23d0dd08261405c 100644 (file)
@@ -17882,8 +17882,10 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
       add_stmt (t);
       break;
 
-    case OMP_SECTION:
     case OMP_MASTER:
+      omp_parallel_combined_clauses = NULL;
+      /* FALLTHRU */
+    case OMP_SECTION:
       stmt = push_stmt_list ();
       RECUR (OMP_BODY (t));
       stmt = pop_stmt_list (stmt);
index 963a1af39be89d9c5e04a23765af2cdd388c6be9..306380907eed714ce4d4340823d031d68c05331d 100644 (file)
@@ -1,6 +1,11 @@
 2020-04-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2020-04-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/94477
+       * g++.dg/gomp/pr94477.C: New test.
+
        2020-04-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/94460
diff --git a/gcc/testsuite/g++.dg/gomp/pr94477.C b/gcc/testsuite/g++.dg/gomp/pr94477.C
new file mode 100644 (file)
index 0000000..e7fdc23
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/94477
+// { dg-do compile }
+
+void foo ();
+
+template <int>
+void
+bar ()
+{
+  #pragma omp parallel master
+  foo ();
+}
+
+void
+baz ()
+{
+  bar<0> ();
+}