]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/58874 ([c++11] ICE with OpenMP reduction declaration and -std=c++11)
authorJakub Jelinek <jakub@redhat.com>
Tue, 26 Nov 2013 20:39:56 +0000 (21:39 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 26 Nov 2013 20:39:56 +0000 (21:39 +0100)
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

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr58874.C [new file with mode: 0644]

index 604f26dc14b69f5d8de0d3989e47593b176db30b..802e4fa77328c4410fc98898b4399d1a4dd51c52 100644 (file)
@@ -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
index d7092cc6759bc2b9fb7199f965d13864c0c165e3..7d3eaeebf6a9950ca7a45bed6923ef63c0ed2fa7 100644 (file)
@@ -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
index a23c3972516809ef271485cd11d7f5ebadb31ef2..a00cd97d63c6094c045c0b7638b1b2b005d9540c 100644 (file)
@@ -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 (file)
index 0000000..be3f53e
--- /dev/null
@@ -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)