https://gcc.gnu.org/g:4f767174b83027091f0e84b4ddb9a6370e549ffd
commit r15-1907-g4f767174b83027091f0e84b4ddb9a6370e549ffd Author: Jakub Jelinek <ja...@redhat.com> Date: Tue Jul 9 10:45:25 2024 +0200 c: Rewrite c_parser_omp_tile_sizes to use c_parser_expr_list The following patch simplifies c_parser_omp_tile_sizes to use c_parser_expr_list, so that it will get CPP_EMBED parsing naturally, without having another spot that needs to be adjusted for it. 2024-07-09 Jakub Jelinek <ja...@redhat.com> * c-parser.cc (c_parser_omp_tile_sizes): Use c_parser_expr_list. * c-c++-common/gomp/tile-11.c: Adjust expected diagnostics for c. * c-c++-common/gomp/tile-12.c: Likewise. Diff: --- gcc/c/c-parser.cc | 25 +++++++++---------------- gcc/testsuite/c-c++-common/gomp/tile-11.c | 6 +++--- gcc/testsuite/c-c++-common/gomp/tile-12.c | 6 +++--- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 8c4e697a4e10..12c5ed5d92c7 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -26431,24 +26431,20 @@ c_parser_omp_tile_sizes (c_parser *parser, location_t loc) if (!parens.require_open (parser)) return error_mark_node; - do - { - if (sizes && !c_parser_require (parser, CPP_COMMA, "expected %<,%>")) - return error_mark_node; - - location_t expr_loc = c_parser_peek_token (parser)->location; - c_expr cexpr = c_parser_expr_no_commas (parser, NULL); - cexpr = convert_lvalue_to_rvalue (expr_loc, cexpr, false, true); - tree expr = cexpr.value; + vec<tree, va_gc> *sizes_vec + = c_parser_expr_list (parser, true, true, NULL, NULL, NULL, NULL); + sizes = build_tree_list_vec (sizes_vec); + release_tree_vector (sizes_vec); + for (tree s = sizes; s; s = TREE_CHAIN (s)) + { + tree expr = TREE_VALUE (s); if (expr == error_mark_node) { parens.skip_until_found_close (parser); return error_mark_node; } - expr = c_fully_fold (expr, false, NULL); - HOST_WIDE_INT n; if (!INTEGRAL_TYPE_P (TREE_TYPE (expr)) || !tree_fits_shwi_p (expr) @@ -26457,17 +26453,14 @@ c_parser_omp_tile_sizes (c_parser *parser, location_t loc) { c_parser_error (parser, "%<sizes%> argument needs positive" " integral constant"); - expr = integer_one_node; + TREE_VALUE (s) = integer_one_node; } - - sizes = tree_cons (NULL_TREE, expr, sizes); } - while (c_parser_next_token_is_not (parser, CPP_CLOSE_PAREN)); parens.require_close (parser); gcc_assert (sizes); tree c = build_omp_clause (loc, OMP_CLAUSE_SIZES); - OMP_CLAUSE_SIZES_LIST (c) = nreverse (sizes); + OMP_CLAUSE_SIZES_LIST (c) = sizes; return c; } diff --git a/gcc/testsuite/c-c++-common/gomp/tile-11.c b/gcc/testsuite/c-c++-common/gomp/tile-11.c index 7659fc5a072b..bf38bbe5dae6 100644 --- a/gcc/testsuite/c-c++-common/gomp/tile-11.c +++ b/gcc/testsuite/c-c++-common/gomp/tile-11.c @@ -21,9 +21,9 @@ test (void) for (int i = 0; i < 100; ++i) dummy (i); - #pragma omp tile sizes(1,2 /* { dg-error "expected ',' before end of line" } */ - for (int i = 0; i < 100; ++i) - dummy (i); + #pragma omp tile sizes(1,2 /* { dg-error "expected '\\\)' before end of line" "" { target c } } */ + for (int i = 0; i < 100; ++i) /* { dg-error "not enough nested loops" "" { target c } } */ + dummy (i); /* { dg-error "expected ',' before end of line" "" { target c++ } .-2 } */ #pragma omp tile sizes /* { dg-error "expected '\\\(' before end of line" } */ for (int i = 0; i < 100; ++i) diff --git a/gcc/testsuite/c-c++-common/gomp/tile-12.c b/gcc/testsuite/c-c++-common/gomp/tile-12.c index 8408d53b641e..f36bbdb0ef68 100644 --- a/gcc/testsuite/c-c++-common/gomp/tile-12.c +++ b/gcc/testsuite/c-c++-common/gomp/tile-12.c @@ -35,9 +35,9 @@ test (void) dummy (i); #pragma omp parallel for - #pragma omp tile sizes(1,2 /* { dg-error "expected ',' before end of line" } */ - for (int i = 0; i < 100; ++i) - dummy (i); + #pragma omp tile sizes(1,2 /* { dg-error "expected '\\\)' before end of line" "" { target c } } */ + for (int i = 0; i < 100; ++i) /* { dg-error "not enough nested loops" "" { target c } } */ + dummy (i); /* { dg-error "expected ',' before end of line" "" { target c++ } .-2 } */ #pragma omp parallel for #pragma omp tile sizes /* { dg-error "expected '\\\(' before end of line" } */