[gcc/devel/omp/gcc-10] openmp: Don't ICE on detach clause with erroneous decl [PR98742]
Kwok Yeung
kcy@gcc.gnu.org
Fri Jan 22 19:51:40 GMT 2021
https://gcc.gnu.org/g:668dc081cccaf5c44e31fe39e741d5644a300bb1
commit 668dc081cccaf5c44e31fe39e741d5644a300bb1
Author: Jakub Jelinek <jakub@redhat.com>
Date: Wed Jan 20 08:35:20 2021 +0100
openmp: Don't ICE on detach clause with erroneous decl [PR98742]
Similarly to how we handle erroneous operands to e.g. allocate clause,
this change just removes those clauses instead of accessing TYPE_MAIN_VARIANT
of its type, which doesn't work on error_mark_node. Also, just for good
measure, bails out if TYPE_NAME is NULL.
2021-01-20 Jakub Jelinek <jakub@redhat.com>
PR c++/98742
* semantics.c (finish_omp_clauses) <case OMP_CLAUSE_DETACH>: If
error_operand_p, remove clause without further checking. Check
for non-NULL TYPE_NAME.
* c-c++-common/gomp/task-detach-2.c: New test.
(cherry picked from commit 7ab1abf3b82a3bcfff9b7bc596166fef6a0d83ab)
Diff:
---
gcc/cp/ChangeLog.omp | 10 ++++++++++
gcc/cp/semantics.c | 6 ++++++
gcc/testsuite/ChangeLog.omp | 8 ++++++++
gcc/testsuite/c-c++-common/gomp/task-detach-2.c | 9 +++++++++
4 files changed, 33 insertions(+)
diff --git a/gcc/cp/ChangeLog.omp b/gcc/cp/ChangeLog.omp
index f071ef61b17..559eb47f12a 100644
--- a/gcc/cp/ChangeLog.omp
+++ b/gcc/cp/ChangeLog.omp
@@ -1,3 +1,13 @@
+2021-01-22 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ Backport from mainline
+ 2021-01-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/98742
+ * semantics.c (finish_omp_clauses) <case OMP_CLAUSE_DETACH>: If
+ error_operand_p, remove clause without further checking. Check
+ for non-NULL TYPE_NAME.
+
2021-01-22 Kwok Cheung Yeung <kcy@codesourcery.com>
Backport from mainline
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 86d5d464a32..b4544f78aa7 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -7350,12 +7350,18 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
remove = true;
break;
}
+ else if (error_operand_p (t))
+ {
+ remove = true;
+ break;
+ }
else
{
tree type = TYPE_MAIN_VARIANT (TREE_TYPE (t));
if (!type_dependent_expression_p (t)
&& (!INTEGRAL_TYPE_P (type)
|| TREE_CODE (type) != ENUMERAL_TYPE
+ || TYPE_NAME (type) == NULL_TREE
|| (DECL_NAME (TYPE_NAME (type))
!= get_identifier ("omp_event_handle_t"))))
{
diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp
index 457ce6e38cf..a00749e988e 100644
--- a/gcc/testsuite/ChangeLog.omp
+++ b/gcc/testsuite/ChangeLog.omp
@@ -1,3 +1,11 @@
+2021-01-22 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ Backport from mainline
+ 2021-01-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/98742
+ * c-c++-common/gomp/task-detach-2.c: New test.
+
2021-01-22 Kwok Cheung Yeung <kcy@codesourcery.com>
Backport from mainline
diff --git a/gcc/testsuite/c-c++-common/gomp/task-detach-2.c b/gcc/testsuite/c-c++-common/gomp/task-detach-2.c
new file mode 100644
index 00000000000..2d197d2fb3e
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/task-detach-2.c
@@ -0,0 +1,9 @@
+/* PR c++/98742 */
+/* { dg-do compile } */
+
+void
+foo ()
+{
+#pragma omp task detach(0) /* { dg-error "before numeric constant" } */
+ ;
+}
More information about the Gcc-cvs
mailing list