https://github.com/OHNope updated 
https://github.com/llvm/llvm-project/pull/212822

>From 8740f20d4e295f895106039181e45b1567e95a4e Mon Sep 17 00:00:00 2001
From: OHNope <[email protected]>
Date: Thu, 30 Jul 2026 14:38:40 +0900
Subject: [PATCH] [Clang][OpenMP] Skip Sema actions for invalid assumption
 clauses

Do not call the Sema actions for absent, contains, and nullary assumption 
clauses after the parser has diagnosed that the clause is not allowed on the 
current directive.

Extend the existing invalid-clause regression test to cover all affected clause 
kinds.

Fixes #212780.
---
 clang/lib/Parse/ParseOpenMP.cpp               | 10 +++++---
 clang/test/SemaOpenMP/gh197162.c              |  6 -----
 .../SemaOpenMP/invalid-clause-on-directive.c  | 25 +++++++++++++++++++
 3 files changed, 31 insertions(+), 10 deletions(-)
 delete mode 100644 clang/test/SemaOpenMP/gh197162.c
 create mode 100644 clang/test/SemaOpenMP/invalid-clause-on-directive.c

diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp
index dd2dc60a99156..6b4a6017669b2 100644
--- a/clang/lib/Parse/ParseOpenMP.cpp
+++ b/clang/lib/Parse/ParseOpenMP.cpp
@@ -3569,8 +3569,9 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind 
DKind,
     } while (TryConsumeToken(tok::comma));
     RLoc = Tok.getLocation();
     T.consumeClose();
-    Clause = Actions.OpenMP().ActOnOpenMPDirectivePresenceClause(
-        CKind, DKVec, Loc, LLoc, RLoc);
+    if (!WrongDirective)
+      Clause = Actions.OpenMP().ActOnOpenMPDirectivePresenceClause(
+          CKind, DKVec, Loc, LLoc, RLoc);
     break;
   }
   case OMPC_no_openmp:
@@ -3584,8 +3585,9 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind 
DKind,
       ErrorFound = true;
     }
     SourceLocation Loc = ConsumeToken();
-    Clause = Actions.OpenMP().ActOnOpenMPNullaryAssumptionClause(
-        CKind, Loc, Tok.getLocation());
+    if (!WrongDirective)
+      Clause = Actions.OpenMP().ActOnOpenMPNullaryAssumptionClause(
+          CKind, Loc, Tok.getLocation());
     break;
   }
   case OMPC_ompx_attribute:
diff --git a/clang/test/SemaOpenMP/gh197162.c b/clang/test/SemaOpenMP/gh197162.c
deleted file mode 100644
index ffdf2ec3c3d8e..0000000000000
--- a/clang/test/SemaOpenMP/gh197162.c
+++ /dev/null
@@ -1,6 +0,0 @@
-// RUN: %clang_cc1 -fopenmp -fsyntax-only -verify %s
-
-void foo() {
-#pragma omp taskloop transparent // expected-error {{unexpected OpenMP clause 
'transparent' in directive '#pragma omp taskloop'}}
-    for(int i = 0; i < 2; i++);
-}
diff --git a/clang/test/SemaOpenMP/invalid-clause-on-directive.c 
b/clang/test/SemaOpenMP/invalid-clause-on-directive.c
new file mode 100644
index 0000000000000..a7c60f1b8224e
--- /dev/null
+++ b/clang/test/SemaOpenMP/invalid-clause-on-directive.c
@@ -0,0 +1,25 @@
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -fsyntax-only -verify %s
+
+void test(void) {
+#pragma omp taskloop transparent // expected-error {{unexpected OpenMP clause 
'transparent' in directive '#pragma omp taskloop'}}
+  for (int i = 0; i < 2; ++i)
+    ;
+
+#pragma omp parallel absent(target) // expected-error {{unexpected OpenMP 
clause 'absent' in directive '#pragma omp parallel'}}
+  {}
+
+#pragma omp parallel contains(target) // expected-error {{unexpected OpenMP 
clause 'contains' in directive '#pragma omp parallel'}}
+  {}
+
+#pragma omp parallel no_openmp // expected-error {{unexpected OpenMP clause 
'no_openmp' in directive '#pragma omp parallel'}}
+  {}
+
+#pragma omp parallel no_openmp_routines // expected-error {{unexpected OpenMP 
clause 'no_openmp_routines' in directive '#pragma omp parallel'}}
+  {}
+
+#pragma omp parallel no_openmp_constructs // expected-error {{unexpected 
OpenMP clause 'no_openmp_constructs' in directive '#pragma omp parallel'}}
+  {}
+
+#pragma omp parallel no_parallelism // expected-error {{unexpected OpenMP 
clause 'no_parallelism' in directive '#pragma omp parallel'}}
+  {}
+}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to