Hi! I've committed this fix for invalid #pragma omp distribute parallel for. If the #pragma omp for parsing returns NULL, i.e. it is invalid and the stmt hasn't been added, then we shouldn't set OMP_PARALLEL_COMBINED on the parallel and similarly for the distribute.
Tested on x86_64-linux, committed to trunk and 4.9 branch. 2014-04-22 Jakub Jelinek <ja...@redhat.com> PR c/59073 c/ * c-parser.c (c_parser_omp_parallel): If c_parser_omp_for fails, don't set OM_PARALLEL_COMBINED and return NULL. cp/ * parser.c (cp_parser_omp_parallel): If cp_parser_omp_for fails, don't set OM_PARALLEL_COMBINED and return NULL. testsuite/ * c-c++-common/gomp/pr59073.c: New test. --- gcc/c/c-parser.c.jj 2014-03-28 19:15:30.000000000 +0100 +++ gcc/c/c-parser.c 2014-04-22 16:36:45.889868866 +0200 @@ -12208,10 +12208,12 @@ c_parser_omp_parallel (location_t loc, c if (!flag_openmp) /* flag_openmp_simd */ return c_parser_omp_for (loc, parser, p_name, mask, cclauses); block = c_begin_omp_parallel (); - c_parser_omp_for (loc, parser, p_name, mask, cclauses); + tree ret = c_parser_omp_for (loc, parser, p_name, mask, cclauses); stmt = c_finish_omp_parallel (loc, cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL], block); + if (ret == NULL_TREE) + return ret; OMP_PARALLEL_COMBINED (stmt) = 1; return stmt; } --- gcc/cp/parser.c.jj 2014-04-14 09:31:51.000000000 +0200 +++ gcc/cp/parser.c 2014-04-22 16:37:22.990681121 +0200 @@ -29829,10 +29829,12 @@ cp_parser_omp_parallel (cp_parser *parse return cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses); block = begin_omp_parallel (); save = cp_parser_begin_omp_structured_block (parser); - cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses); + tree ret = cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses); cp_parser_end_omp_structured_block (parser, save); stmt = finish_omp_parallel (cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL], block); + if (ret == NULL_TREE) + return ret; OMP_PARALLEL_COMBINED (stmt) = 1; return stmt; } --- gcc/testsuite/c-c++-common/gomp/pr59073.c.jj 2014-04-22 16:42:26.067112196 +0200 +++ gcc/testsuite/c-c++-common/gomp/pr59073.c 2014-04-22 16:41:57.000000000 +0200 @@ -0,0 +1,12 @@ +/* PR c/59073 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +void +foo () +{ + int i; +#pragma omp distribute parallel for + for (i = 0; i < 10; i) /* { dg-error "invalid increment expression" } */ + ; +} Jakub