diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e909ba22396a..21a222153858 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2009-11-06 Jakub Jelinek + + 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 PR c++/34180 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 28fcabc313d7..1d677cb92ebe 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 60159c1d32af..5ea0e42aa043 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-11-06 Jakub Jelinek + + PR c++/41967 + * g++.dg/gomp/pr41967.C: New test. + 2009-11-06 Michael Matz 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 index 000000000000..0eb489e8beef --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr41967.C @@ -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; +}