aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Imschweiler <robert.imschweiler@amd.com>2025-09-02 23:09:55 +0200
committerGitHub <noreply@github.com>2025-09-02 21:09:55 +0000
commit3e0b91b77c0e4a056b4d8be61a8b82a077d36644 (patch)
tree4d857067843fe976978152e841d9c92930ff00fb
parent665e875f1a86be650e044bb20744bb272d03e11d (diff)
downloadllvm-3e0b91b77c0e4a056b4d8be61a8b82a077d36644.zip
llvm-3e0b91b77c0e4a056b4d8be61a8b82a077d36644.tar.gz
llvm-3e0b91b77c0e4a056b4d8be61a8b82a077d36644.tar.bz2
[OpenMP][clang] Fix CaptureRegion for message clause (#156525)
Fixes https://github.com/llvm/llvm-project/issues/156232
-rw-r--r--clang/lib/Sema/SemaOpenMP.cpp8
-rw-r--r--clang/test/OpenMP/error_message.cpp3
2 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 4b030a2..73311d5 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -16479,9 +16479,13 @@ OMPClause *SemaOpenMP::ActOnOpenMPMessageClause(Expr *ME,
Stmt *HelperValStmt = nullptr;
+ // Depending on whether this clause appears in an executable context or not,
+ // we may or may not build a capture.
OpenMPDirectiveKind DKind = DSAStack->getCurrentDirective();
- OpenMPDirectiveKind CaptureRegion = getOpenMPCaptureRegionForClause(
- DKind, OMPC_message, getLangOpts().OpenMP);
+ OpenMPDirectiveKind CaptureRegion =
+ DKind == OMPD_unknown ? OMPD_unknown
+ : getOpenMPCaptureRegionForClause(
+ DKind, OMPC_message, getLangOpts().OpenMP);
if (CaptureRegion != OMPD_unknown &&
!SemaRef.CurContext->isDependentContext()) {
ME = SemaRef.MakeFullExpr(ME).get();
diff --git a/clang/test/OpenMP/error_message.cpp b/clang/test/OpenMP/error_message.cpp
index 6e64ee2..e96562e 100644
--- a/clang/test/OpenMP/error_message.cpp
+++ b/clang/test/OpenMP/error_message.cpp
@@ -4,6 +4,9 @@
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ferror-limit 100 %s -Wuninitialized
// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized
+// Test outside of an executable context.
+#pragma omp error severity(warning) message("msg") at(compilation) // expected-warning {{msg}}
+
template <class T>
T tmain(T argc) {
if (argc)