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 ".*" }
+};

Reply via email to