aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-11-26 21:39:56 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-11-26 21:39:56 +0100
commit5999f07fba49a339bed42319b2a304f521872931 (patch)
treef66233b5a66a2b002c09d2bb559c1438540f790c /gcc
parent4ceffa27eea18baea5660ef3e29186eae7fa247a (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/parser.c2
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr58874.C14
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)