[gcc/devel/ranger] openmp: Fix parallel master error recovery [PR94512]
Aldy Hernandez
aldyh@gcc.gnu.org
Wed Jun 17 20:13:50 GMT 2020
https://gcc.gnu.org/g:4df50a059fbd4d4a1cb067bd43caccdfca0327a8
commit 4df50a059fbd4d4a1cb067bd43caccdfca0327a8
Author: Jakub Jelinek <jakub@redhat.com>
Date: Tue Apr 7 14:30:53 2020 +0200
openmp: Fix parallel master error recovery [PR94512]
We need to set OMP_PARALLEL_COMBINED only if the parsing of omp_master
succeeded, because otherwise there is no nested master construct in the
parallel.
2020-04-07 Jakub Jelinek <jakub@redhat.com>
PR c++/94512
* c-parser.c (c_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
if c_parser_omp_master succeeded.
* parser.c (cp_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
if cp_parser_omp_master succeeded.
* g++.dg/gomp/pr94512.C: New test.
Diff:
---
gcc/c/ChangeLog | 6 ++++++
gcc/c/c-parser.c | 2 +-
gcc/cp/ChangeLog | 6 ++++++
gcc/cp/parser.c | 2 +-
gcc/testsuite/ChangeLog | 3 +++
gcc/testsuite/g++.dg/gomp/pr94512.C | 18 ++++++++++++++++++
6 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index a3350c2b9d1..d30d2b02b2e 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2020-04-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/94512
+ * c-parser.c (c_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
+ if c_parser_omp_master succeeded.
+
2020-03-23 Jakub Jelinek <jakub@redhat.com>
PR gcov-profile/94029
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index aeeac8c5f21..17a28e97ca0 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -18877,9 +18877,9 @@ c_parser_omp_parallel (location_t loc, c_parser *parser,
stmt = c_finish_omp_parallel (loc,
cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
block);
- OMP_PARALLEL_COMBINED (stmt) = 1;
if (ret == NULL)
return ret;
+ OMP_PARALLEL_COMBINED (stmt) = 1;
return stmt;
}
else if (strcmp (p, "loop") == 0)
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 02fd9cff79d..4452796f2fa 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2020-04-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/94512
+ * parser.c (cp_parser_omp_parallel): Set OMP_PARALLEL_COMBINED
+ if cp_parser_omp_master succeeded.
+
2020-04-06 Jason Merrill <jason@redhat.com>
PR c++/94462
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 7e5921e039f..fbcdc9bb5fc 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -39818,9 +39818,9 @@ cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok,
cp_parser_end_omp_structured_block (parser, save);
stmt = finish_omp_parallel (cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
block);
- OMP_PARALLEL_COMBINED (stmt) = 1;
if (ret == NULL_TREE)
return ret;
+ OMP_PARALLEL_COMBINED (stmt) = 1;
return stmt;
}
else if (strcmp (p, "loop") == 0)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d9209f920ae..da2664b7d7f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2020-04-07 Jakub Jelinek <jakub@redhat.com>
+ PR c++/94512
+ * g++.dg/gomp/pr94512.C: New test.
+
PR target/94500
* gcc.target/i386/avx512bw-pr94500.c: New test.
diff --git a/gcc/testsuite/g++.dg/gomp/pr94512.C b/gcc/testsuite/g++.dg/gomp/pr94512.C
new file mode 100644
index 00000000000..8ba0e65795f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr94512.C
@@ -0,0 +1,18 @@
+// PR c++/94512
+
+void
+foo ();
+
+template <int>
+void
+bar ()
+{
+#pragma omp parallel master taskloop
+ foo (); // { dg-error "for statement expected before" }
+}
+
+void
+baz ()
+{
+ bar<0> ();
+}
More information about the Gcc-cvs
mailing list