[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