diff options
author | Robert Imschweiler <robert.imschweiler@amd.com> | 2025-09-02 23:09:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-02 21:09:55 +0000 |
commit | 3e0b91b77c0e4a056b4d8be61a8b82a077d36644 (patch) | |
tree | 4d857067843fe976978152e841d9c92930ff00fb | |
parent | 665e875f1a86be650e044bb20744bb272d03e11d (diff) | |
download | llvm-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.cpp | 8 | ||||
-rw-r--r-- | clang/test/OpenMP/error_message.cpp | 3 |
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) |