aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul-Antoine Arras <parras@baylibre.com>2025-01-06 16:06:43 +0100
committerPaul-Antoine Arras <parras@baylibre.com>2025-01-10 18:58:46 +0100
commitb5a679898986ae22ffdec538374c5378c26a229f (patch)
tree6d14ba7a6f8c9d8365a5b1288e5d5966ae6f818e /gcc
parent4c688399db12c509c081d52b8926ac6d7de6068c (diff)
downloadgcc-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.cc4
-rw-r--r--gcc/testsuite/g++.dg/gomp/dispatch-8.C10
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 ".*" }
+};