]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Do not call cp_parser_omp_dispatch directly in cp_parser_pragma
authorPaul-Antoine Arras <parras@baylibre.com>
Mon, 6 Jan 2025 15:06:43 +0000 (16:06 +0100)
committerPaul-Antoine Arras <parras@baylibre.com>
Fri, 10 Jan 2025 17:58:46 +0000 (18:58 +0100)
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.

gcc/cp/parser.cc
gcc/testsuite/g++.dg/gomp/dispatch-8.C [new file with mode: 0644]

index 80bc2d8e9e1efecf68c9b1f0d53de351e58f1f28..9600b14091642c47d50265ce1f0fbb47c610e04d 100644 (file)
@@ -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 (file)
index 0000000..b8e8e73
--- /dev/null
@@ -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 ".*" }
+};