From: Jakub Jelinek Date: Sat, 25 Jan 2025 09:28:23 +0000 (+0100) Subject: c: Diagnose ,) at the end of OpenMP clauses [PR118639] X-Git-Tag: basepoints/gcc-16~2346 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7eac20b0dde8df303557b6dd550d06ee98836c3c;p=thirdparty%2Fgcc.git c: Diagnose ,) at the end of OpenMP clauses [PR118639] This is something the C++ FE has been diagnosing but C FE only complained if there wasn't an identifier right after opening ( 2025-01-25 Jakub Jelinek PR c/118639 * c-parser.cc (c_parser_omp_variable_list): Remove first variable and emit "expected identifier" error regardless of it. * c-c++-common/gomp/pr118639.c: New test. * c-c++-common/goacc/cache-2.c: Remove one xfail for c. --- diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 93da0fbea50..4f40dfc18d5 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -16307,7 +16307,6 @@ c_parser_omp_variable_list (c_parser *parser, auto_vec tokens; unsigned int tokens_avail = 0; c_token *saved_tokens = NULL; - bool first = true; while (1) { @@ -16343,7 +16342,6 @@ c_parser_omp_variable_list (c_parser *parser, break; c_parser_consume_token (parser); - first = false; continue; } @@ -16507,8 +16505,7 @@ c_parser_omp_variable_list (c_parser *parser, t = c_parser_predefined_identifier (parser).value; else { - if (first) - c_parser_error (parser, "expected identifier"); + c_parser_error (parser, "expected identifier"); break; } @@ -16702,7 +16699,6 @@ c_parser_omp_variable_list (c_parser *parser, break; c_parser_consume_token (parser); - first = false; } return list; diff --git a/gcc/testsuite/c-c++-common/goacc/cache-2.c b/gcc/testsuite/c-c++-common/goacc/cache-2.c index 80b925e5112..085091d2cd2 100644 --- a/gcc/testsuite/c-c++-common/goacc/cache-2.c +++ b/gcc/testsuite/c-c++-common/goacc/cache-2.c @@ -33,7 +33,7 @@ test () #pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */ #pragma acc cache (,) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" } */ #pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */ -#pragma acc cache (a[0:N],) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" "" { xfail c } } */ +#pragma acc cache (a[0:N],) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" } */ #pragma acc cache (a[0:N]) copyin (a[0:N]) /* { dg-error "expected end of line before 'copyin'" } */ #pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */ #pragma acc cache (a[0:N] b[0:N]) /* { dg-error "expected '\\\)' before 'b'" } */ diff --git a/gcc/testsuite/c-c++-common/gomp/pr118639.c b/gcc/testsuite/c-c++-common/gomp/pr118639.c new file mode 100644 index 00000000000..eba4b757deb --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr118639.c @@ -0,0 +1,14 @@ +/* PR c/118639 */ +/* { dg-do compile } */ + +void +foo (void) +{ + int a = 0, b = 0, c = 0; +#ifndef __cplusplus + #pragma omp allocate (a, ) /* { dg-error "expected" "" { target c } } */ +#endif + #pragma omp flush (b, ) /* { dg-error "expected" } */ + #pragma omp parallel firstprivate (c, ) /* { dg-error "expected" } */ + ; +}