[clang] 2f66e5f - [OpenACC] Fixed error recovery during jump diagnostics for OpenACC
via cfe-commits
cfe-commits at lists.llvm.org
Tue May 20 06:31:17 PDT 2025
Author: erichkeane
Date: 2025-05-20T06:31:13-07:00
New Revision: 2f66e5fcbad211e0d71b1a533071d31b36f088ec
URL: https://github.com/llvm/llvm-project/commit/2f66e5fcbad211e0d71b1a533071d31b36f088ec
DIFF: https://github.com/llvm/llvm-project/commit/2f66e5fcbad211e0d71b1a533071d31b36f088ec.diff
LOG: [OpenACC] Fixed error recovery during jump diagnostics for OpenACC
We didn't consider/test a case where the structured block/loop would be
empty, which happens when the body is ONLY a break.
Fixes: #140712
Added:
clang/test/SemaOpenACC/gh140712.cpp
Modified:
clang/lib/Sema/JumpDiagnostics.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/JumpDiagnostics.cpp b/clang/lib/Sema/JumpDiagnostics.cpp
index a852a950b47f4..36704c3826dfd 100644
--- a/clang/lib/Sema/JumpDiagnostics.cpp
+++ b/clang/lib/Sema/JumpDiagnostics.cpp
@@ -602,7 +602,10 @@ void JumpScopeChecker::BuildScopeInformation(Stmt *S,
Scopes.push_back(GotoScope(
ParentScope, diag::note_acc_branch_into_compute_construct,
diag::note_acc_branch_out_of_compute_construct, CC->getBeginLoc()));
- BuildScopeInformation(CC->getStructuredBlock(), NewParentScope);
+ // This can be 'null' if the 'body' is a break that we diagnosed, so no
+ // reason to put the scope into place.
+ if (CC->getStructuredBlock())
+ BuildScopeInformation(CC->getStructuredBlock(), NewParentScope);
return;
}
@@ -612,7 +615,10 @@ void JumpScopeChecker::BuildScopeInformation(Stmt *S,
Scopes.push_back(GotoScope(
ParentScope, diag::note_acc_branch_into_compute_construct,
diag::note_acc_branch_out_of_compute_construct, CC->getBeginLoc()));
- BuildScopeInformation(CC->getLoop(), NewParentScope);
+ // This can be 'null' if the 'body' is a break that we diagnosed, so no
+ // reason to put the scope into place.
+ if (CC->getLoop())
+ BuildScopeInformation(CC->getLoop(), NewParentScope);
return;
}
diff --git a/clang/test/SemaOpenACC/gh140712.cpp b/clang/test/SemaOpenACC/gh140712.cpp
new file mode 100644
index 0000000000000..ca1b6234be72d
--- /dev/null
+++ b/clang/test/SemaOpenACC/gh140712.cpp
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 %s -fopenacc -verify
+
+void foo() {
+ switch (int x = 0) {
+ case 0:
+#pragma acc parallel
+ break; // expected-error{{invalid branch out of OpenACC Compute/Combined Construct}}
+ }
+}
More information about the cfe-commits
mailing list