From: Jakub Jelinek Date: Fri, 22 Jun 2018 21:02:52 +0000 (+0200) Subject: backport: re PR c++/84791 (ICE with broken OpenMP reduction clause) X-Git-Tag: releases/gcc-7.4.0~346 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=870c4f81ad0ac193b6f08a9582ef361f18a90936;p=thirdparty%2Fgcc.git backport: re PR c++/84791 (ICE with broken OpenMP reduction clause) Backported from mainline 2018-03-30 Jakub Jelinek PR c++/84791 * semantics.c (finish_omp_reduction_clause): If OMP_CLAUSE_REDUCTION_PLACEHOLDER is error_mark_node, return true even if processing_template_decl. * g++.dg/gomp/pr84791.C: New test. From-SVN: r261943 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5e4231ab8c1d..9eff156e8aab 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,13 @@ 2018-06-22 Jakub Jelinek Backported from mainline + 2018-03-30 Jakub Jelinek + + PR c++/84791 + * semantics.c (finish_omp_reduction_clause): If + OMP_CLAUSE_REDUCTION_PLACEHOLDER is error_mark_node, return true + even if processing_template_decl. + 2018-03-27 Jakub Jelinek PR c++/85076 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index d8c4f011526c..52ca2a53efc0 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5638,7 +5638,11 @@ finish_omp_reduction_clause (tree c, bool *need_default_ctor, bool *need_dtor) return false; } else if (processing_template_decl) - return false; + { + if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) == error_mark_node) + return true; + return false; + } tree id = OMP_CLAUSE_REDUCTION_PLACEHOLDER (c); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d3eb5b930097..e690c88bc1f5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2018-06-22 Jakub Jelinek Backported from mainline + 2018-03-30 Jakub Jelinek + + PR c++/84791 + * g++.dg/gomp/pr84791.C: New test. + 2018-03-28 Jakub Jelinek PR target/85095 diff --git a/gcc/testsuite/g++.dg/gomp/pr84791.C b/gcc/testsuite/g++.dg/gomp/pr84791.C new file mode 100644 index 000000000000..4e6d3b8fd444 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr84791.C @@ -0,0 +1,15 @@ +// PR c++/84791 +// { dg-do compile } + +typedef int I; + +template +void +foo () +{ + I i; + #pragma omp parallel reduction (I::I: i) // { dg-error "'I' is not a class, namespace, or enumeration" "" { target c++11 } } + ; // { dg-error "'I' is not a class or namespace" "" { target c++98_only } .-1 } +} + +template void foo<0> ();