diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-11-26 21:39:56 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-11-26 21:39:56 +0100 |
commit | 5999f07fba49a339bed42319b2a304f521872931 (patch) | |
tree | f66233b5a66a2b002c09d2bb559c1438540f790c /gcc | |
parent | 4ceffa27eea18baea5660ef3e29186eae7fa247a (diff) | |
download | gcc-5999f07fba49a339bed42319b2a304f521872931.zip gcc-5999f07fba49a339bed42319b2a304f521872931.tar.gz gcc-5999f07fba49a339bed42319b2a304f521872931.tar.bz2 |
re PR c++/58874 ([c++11] ICE with OpenMP reduction declaration and -std=c++11)
PR c++/58874
* parser.c (cp_parser_late_parsing_for_member): For OpenMP UDRs
pass 2 instead of 0 to finish_function.
* g++.dg/gomp/pr58874.C: New test.
From-SVN: r205412
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr58874.C | 14 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 604f26d..802e4fa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-11-26 Jakub Jelinek <jakub@redhat.com> + + PR c++/58874 + * parser.c (cp_parser_late_parsing_for_member): For OpenMP UDRs + pass 2 instead of 0 to finish_function. + 2013-11-26 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58700 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index d7092cc..7d3eaee 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -23275,7 +23275,7 @@ cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function) { parser->lexer->in_pragma = true; cp_parser_omp_declare_reduction_exprs (member_function, parser); - finish_function (0); + finish_function (/*inline*/2); cp_check_omp_declare_reduction (member_function); } else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a23c397..a00cd97 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2013-11-26 Jakub Jelinek <jakub@redhat.com> + PR c++/58874 + * g++.dg/gomp/pr58874.C: New test. + PR middle-end/59150 * g++.dg/gomp/pr59150.C: New test. diff --git a/gcc/testsuite/g++.dg/gomp/pr58874.C b/gcc/testsuite/g++.dg/gomp/pr58874.C new file mode 100644 index 0000000..be3f53e --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr58874.C @@ -0,0 +1,14 @@ +// PR c++/58874 +// { dg-do compile } +// { dg-options "-fopenmp" } + +struct A +{ + template<int> struct B + { + #pragma omp declare reduction (x : int : omp_out |= omp_in) + }; +}; + +#pragma omp declare reduction (y : long : omp_out |= omp_in) \ + initializer (omp_priv = 0) |