diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-03-30 20:38:36 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-03-30 20:38:36 +0200 |
commit | 9d620422f5ba32ae0dc1daf47da5382f876408f5 (patch) | |
tree | 60d00170918b6712fb92a72b22f94ec9ec9c6361 /gcc | |
parent | 85d367756d15aee2a4e40ac147fc567bad949a27 (diff) | |
download | gcc-9d620422f5ba32ae0dc1daf47da5382f876408f5.zip gcc-9d620422f5ba32ae0dc1daf47da5382f876408f5.tar.gz gcc-9d620422f5ba32ae0dc1daf47da5382f876408f5.tar.bz2 |
re PR c++/84791 (ICE with broken OpenMP reduction clause)
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: r258981
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr84791.C | 15 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 77c729c..13b2435 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2018-03-30 Jakub Jelinek <jakub@redhat.com> + + 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-29 David Malcolm <dmalcolm@redhat.com> PR c++/84269 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 035e395..eef9e2f 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5623,7 +5623,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 e17846e..31d0f01 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-30 Jakub Jelinek <jakub@redhat.com> + + PR c++/84791 + * g++.dg/gomp/pr84791.C: New test. + 2018-03-30 Paul Thomas <pault@gcc.gnu.org> PR fortran/84931 diff --git a/gcc/testsuite/g++.dg/gomp/pr84791.C b/gcc/testsuite/g++.dg/gomp/pr84791.C new file mode 100644 index 0000000..4e6d3b8 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr84791.C @@ -0,0 +1,15 @@ +// PR c++/84791 +// { dg-do compile } + +typedef int I; + +template <int> +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> (); |