OSDN Git Service

PR c++/41967
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Nov 2009 17:51:20 +0000 (17:51 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Nov 2009 17:51:20 +0000 (17:51 +0000)
* parser.c (cp_parser_omp_for_loop): After diagnosing not perfectly
nested loop and parsing statements, don't cp_parser_require }, instead
exit the loop if next token is CPP_EOF.

* g++.dg/gomp/pr41967.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153972 138bc75d-0d04-0410-961f-82ee72b054a4

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

index e909ba2..21a2221 100644 (file)
@@ -1,3 +1,10 @@
+2009-11-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/41967
+       * parser.c (cp_parser_omp_for_loop): After diagnosing not perfectly
+       nested loop and parsing statements, don't cp_parser_require }, instead
+       exit the loop if next token is CPP_EOF.
+
 2009-11-05  Jason Merrill  <jason@redhat.com>
 
        PR c++/34180
index 28fcabc..1d677cb 100644 (file)
@@ -22424,7 +22424,8 @@ cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
            }
          collapse_err = true;
          cp_parser_statement_seq_opt (parser, NULL);
-         cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
+         if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
+           break;
        }
     }
 
index 60159c1..5ea0e42 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/41967
+       * g++.dg/gomp/pr41967.C: New test.
+
 2009-11-06  Michael Matz  <matz@suse.de>
 
        PR middle-end/41963
diff --git a/gcc/testsuite/g++.dg/gomp/pr41967.C b/gcc/testsuite/g++.dg/gomp/pr41967.C
new file mode 100644 (file)
index 0000000..0eb489e
--- /dev/null
@@ -0,0 +1,17 @@
+// PR c++/41967
+// { dg-do compile }
+// { dg-options "-fopenmp" }
+
+int
+foo ()
+{
+  int sum = 0;
+#pragma omp for collapse(2)
+  for (int i = 0; i < 5; ++i)
+    {
+      for (int j = 0; j < 5; ++j)
+       ++sum;
+      ++sum;   // { dg-error "collapsed loops not perfectly nested" }
+    }
+  return sum;
+}