From: Jakub Jelinek Date: Fri, 2 Jul 2021 19:57:24 +0000 (+0200) Subject: openmp: Reject #pragma omp atomic update, [PR101297] X-Git-Tag: basepoints/gcc-13~6323 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ca89394280da4afad6074ec3cb7136b6142af7b;p=thirdparty%2Fgcc.git openmp: Reject #pragma omp atomic update, [PR101297] I've noticed that we allow a trailing comma on OpenMP atomic construct if there is at least one clause. Commas should be only allowed to separate the clauses (or in OpenMP 5.1 to separate directive name from the clauses). 2021-07-02 Jakub Jelinek PR c/101297 * c-parser.c (c_parser_omp_atomic): Consume comma only if it appears before a CPP_NAME. * parser.c (cp_parser_omp_atomic): Consume comma only if it appears before a CPP_NAME. * c-c++-common/gomp/atomic-24.c: New test. --- diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 3922b569c3a6..9a56e0c04c6a 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -17533,7 +17533,9 @@ c_parser_omp_atomic (location_t loc, c_parser *parser, bool openacc) while (c_parser_next_token_is_not (parser, CPP_PRAGMA_EOL)) { - if (!first && c_parser_next_token_is (parser, CPP_COMMA)) + if (!first + && c_parser_next_token_is (parser, CPP_COMMA) + && c_parser_peek_2nd_token (parser)->type == CPP_NAME) c_parser_consume_token (parser); first = false; diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 02daa7a6f6a2..3550cd06dc19 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -39171,7 +39171,9 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok, bool openacc) while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL)) { - if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) + if (!first + && cp_lexer_next_token_is (parser->lexer, CPP_COMMA) + && cp_lexer_nth_token_is (parser->lexer, 2, CPP_NAME)) cp_lexer_consume_token (parser->lexer); first = false; diff --git a/gcc/testsuite/c-c++-common/gomp/atomic-24.c b/gcc/testsuite/c-c++-common/gomp/atomic-24.c new file mode 100644 index 000000000000..f70c80510233 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/atomic-24.c @@ -0,0 +1,12 @@ +/* PR c/101297 */ + +int i; + +void +foo (void) +{ + #pragma omp atomic update, /* { dg-error "expected end of line before ',' token" } */ + i++; + #pragma omp atomic update,, /* { dg-error "expected end of line before ',' token" } */ + i++; +}