[clang] 8fc8051 - [OpenACC] Fix crash on error recovery of variable in OpenACC mode
via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 18 07:37:49 PDT 2025
Author: erichkeane
Date: 2025-08-18T07:37:45-07:00
New Revision: 8fc80519cdb97c7ad762c750e3e59c622b181599
URL: https://github.com/llvm/llvm-project/commit/8fc80519cdb97c7ad762c750e3e59c622b181599
DIFF: https://github.com/llvm/llvm-project/commit/8fc80519cdb97c7ad762c750e3e59c622b181599.diff
LOG: [OpenACC] Fix crash on error recovery of variable in OpenACC mode
As reported, OpenACC's variable declaration handling was assuming some
semblence of legality in the example, so it didn't properly handle an
error case. This patch fixes its assumptions so that we don't crash.
Fixes #154008
Added:
clang/test/SemaOpenACC/gh154008.cpp
Modified:
clang/lib/Sema/SemaOpenACC.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp
index 3f870ba528ad0..07713992da352 100644
--- a/clang/lib/Sema/SemaOpenACC.cpp
+++ b/clang/lib/Sema/SemaOpenACC.cpp
@@ -1921,8 +1921,13 @@ void SemaOpenACC::ActOnVariableDeclarator(VarDecl *VD) {
return;
// This cast should be safe, since a static-local can only happen in a
- // function declaration.
- auto *ContextDecl = cast<FunctionDecl>(getCurContext());
+ // function declaration. However, in error cases (or perhaps ObjC/C++?), this
+ // could possibly be something like a 'block' decl, so if this is NOT a
+ // function decl, just give up.
+ auto *ContextDecl = dyn_cast<FunctionDecl>(getCurContext());
+
+ if (!ContextDecl)
+ return;
// OpenACC 3.3 2.15:
// In C and C++, function static variables are not supported in functions to
diff --git a/clang/test/SemaOpenACC/gh154008.cpp b/clang/test/SemaOpenACC/gh154008.cpp
new file mode 100644
index 0000000000000..653f0f7839c02
--- /dev/null
+++ b/clang/test/SemaOpenACC/gh154008.cpp
@@ -0,0 +1,3 @@
+// RUN: %clang_cc1 %s -fopenacc -verify
+
+void *a = ^ { static int b };
More information about the cfe-commits
mailing list