diff options
author | Paul-Antoine Arras <parras@baylibre.com> | 2025-01-06 16:06:43 +0100 |
---|---|---|
committer | Paul-Antoine Arras <parras@baylibre.com> | 2025-01-10 18:58:46 +0100 |
commit | b5a679898986ae22ffdec538374c5378c26a229f (patch) | |
tree | 6d14ba7a6f8c9d8365a5b1288e5d5966ae6f818e /gcc | |
parent | 4c688399db12c509c081d52b8926ac6d7de6068c (diff) | |
download | gcc-b5a679898986ae22ffdec538374c5378c26a229f.zip gcc-b5a679898986ae22ffdec538374c5378c26a229f.tar.gz gcc-b5a679898986ae22ffdec538374c5378c26a229f.tar.bz2 |
Do not call cp_parser_omp_dispatch directly in cp_parser_pragma
This is a followup to
ed49709acda OpenMP: C++ front-end support for dispatch + adjust_args.
The call to cp_parser_omp_dispatch only belongs in cp_parser_omp_construct. In
cp_parser_pragma, handle PRAGMA_OMP_DISPATCH by calling cp_parser_omp_construct.
gcc/cp/ChangeLog:
* parser.cc (cp_parser_pragma): Replace call to cp_parser_omp_dispatch
with cp_parser_omp_construct and check context.
gcc/testsuite/ChangeLog:
* g++.dg/gomp/dispatch-8.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/parser.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/dispatch-8.C | 10 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 80bc2d8..9600b14 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -53057,7 +53057,9 @@ cp_parser_pragma (cp_parser *parser, enum pragma_context context, bool *if_p) break; case PRAGMA_OMP_DISPATCH: - cp_parser_omp_dispatch (parser, pragma_tok); + if (context != pragma_stmt && context != pragma_compound) + goto bad_stmt; + cp_parser_omp_construct (parser, pragma_tok, if_p); return true; case PRAGMA_IVDEP: diff --git a/gcc/testsuite/g++.dg/gomp/dispatch-8.C b/gcc/testsuite/g++.dg/gomp/dispatch-8.C new file mode 100644 index 0000000..b8e8e73db --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/dispatch-8.C @@ -0,0 +1,10 @@ +// { dg-do compile } + +// Check that an appropriate diagnostic is emitted when a dispatch directive +// appears in a pragma_member context. + +void k(); +struct t { + #pragma omp dispatch // { dg-error "expected declaration specifiers before end of line" } + k(); // { dg-error ".*" } +}; |