https://gcc.gnu.org/g:7ba8e60967f74fa0adde03e494dc9f2a5be9497f
commit 7ba8e60967f74fa0adde03e494dc9f2a5be9497f Author: Paul-Antoine Arras <par...@baylibre.com> Date: Mon Jan 6 16:06:43 2025 +0100 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. (cherry picked from commit b5a679898986ae22ffdec538374c5378c26a229f) Diff: --- gcc/cp/ChangeLog.omp | 8 ++++++++ gcc/cp/parser.cc | 4 +++- gcc/testsuite/ChangeLog.omp | 7 +++++++ gcc/testsuite/g++.dg/gomp/dispatch-8.C | 10 ++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/gcc/cp/ChangeLog.omp b/gcc/cp/ChangeLog.omp index 95aa7a78283e..58896c23731d 100644 --- a/gcc/cp/ChangeLog.omp +++ b/gcc/cp/ChangeLog.omp @@ -1,3 +1,11 @@ +2025-01-27 Paul-Antoine Arras <par...@baylibre.com> + + Backported from master: + 2025-01-10 Paul-Antoine Arras <par...@baylibre.com> + + * parser.cc (cp_parser_pragma): Replace call to cp_parser_omp_dispatch + with cp_parser_omp_construct and check context. + 2025-01-27 Paul-Antoine Arras <par...@baylibre.com> Backported from master: diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 9c40ceacce35..94a65bee7d96 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -53293,7 +53293,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/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index f662215ac739..0a2661989f6f 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,10 @@ +2025-01-27 Paul-Antoine Arras <par...@baylibre.com> + + Backported from master: + 2025-01-10 Paul-Antoine Arras <par...@baylibre.com> + + * g++.dg/gomp/dispatch-8.C: New test. + 2025-01-27 Paul-Antoine Arras <par...@baylibre.com> Backported from master: 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 000000000000..b8e8e73db1ff --- /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 ".*" } +};