From: Jakub Jelinek Date: Wed, 20 Jan 2021 07:35:20 +0000 (+0100) Subject: openmp: Don't ICE on detach clause with erroneous decl [PR98742] X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=668dc081cccaf5c44e31fe39e741d5644a300bb1;p=thirdparty%2Fgcc.git 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 PR c++/98742 * semantics.c (finish_omp_clauses) : 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 --git a/gcc/cp/ChangeLog.omp b/gcc/cp/ChangeLog.omp index f071ef61b170..559eb47f12a1 100644 --- a/gcc/cp/ChangeLog.omp +++ b/gcc/cp/ChangeLog.omp @@ -1,3 +1,13 @@ +2021-01-22 Kwok Cheung Yeung + + Backport from mainline + 2021-01-20 Jakub Jelinek + + PR c++/98742 + * semantics.c (finish_omp_clauses) : If + error_operand_p, remove clause without further checking. Check + for non-NULL TYPE_NAME. + 2021-01-22 Kwok Cheung Yeung Backport from mainline diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 86d5d464a325..b4544f78aa7d 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 457ce6e38cfe..a00749e988e6 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,11 @@ +2021-01-22 Kwok Cheung Yeung + + Backport from mainline + 2021-01-20 Jakub Jelinek + + PR c++/98742 + * c-c++-common/gomp/task-detach-2.c: New test. + 2021-01-22 Kwok Cheung Yeung 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 000000000000..2d197d2fb3e3 --- /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" } */ + ; +}