From e162a134863bfd95d356fed2edf600854a5712c8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 22 Apr 2014 18:22:22 +0200 Subject: [PATCH] re PR c/59073 (ICE with missing increment in OpenMP for-loop) 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. From-SVN: r209646 --- gcc/c/ChangeLog | 6 ++++++ gcc/c/c-parser.c | 4 +++- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/c-c++-common/gomp/pr59073.c | 12 ++++++++++++ 6 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/gomp/pr59073.c diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index bacfbe36702f..2d182f354d5a 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2014-04-22 Jakub Jelinek + + PR c/59073 + * c-parser.c (c_parser_omp_parallel): If c_parser_omp_for + fails, don't set OM_PARALLEL_COMBINED and return NULL. + 2014-04-12 Igor Zamyatin PR middle-end/60469 diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 5653e49f4824..0deab8404563 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -12208,10 +12208,12 @@ c_parser_omp_parallel (location_t loc, c_parser *parser, 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; } diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b7db35039f1f..2105ab2cd911 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-04-22 Jakub Jelinek + + PR c/59073 + * parser.c (cp_parser_omp_parallel): If cp_parser_omp_for + fails, don't set OM_PARALLEL_COMBINED and return NULL. + 2014-04-18 Jason Merrill DR 1571 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index bb59e3bcdd19..4e6a2b88f320 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -29829,10 +29829,12 @@ cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok, 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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2dced65048de..389ac5d08e0d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-04-22 Jakub Jelinek + + PR c/59073 + * c-c++-common/gomp/pr59073.c: New test. + 2014-04-22 Alex Velenko * gcc.target/aarch64/vreinterpret_f64_1.c: New. diff --git a/gcc/testsuite/c-c++-common/gomp/pr59073.c b/gcc/testsuite/c-c++-common/gomp/pr59073.c new file mode 100644 index 000000000000..543ff5d349c9 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr59073.c @@ -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" } */ + ; +}