[clang] [clang] Fix static local variables in consteval functions (PR #156933)

Mariya Podchishchaeva via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 12 07:43:32 PDT 2025


================
@@ -432,7 +443,8 @@ void CodeGenFunction::EmitStaticVarDecl(const VarDecl &D,
   bool isCudaSharedVar = getLangOpts().CUDA && getLangOpts().CUDAIsDevice &&
                          D.hasAttr<CUDASharedAttr>();
   // If this value has an initializer, emit it.
-  if (D.getInit() && !isCudaSharedVar) {
+  if (D.getInit() && !isCudaSharedVar &&
+      !(D.isUsableInConstantExpressions(getContext()) && D.isStaticLocal())) {
----------------
Fznamznon wrote:

>  need to see what happens a bit more to avoid that check...

So, the problem is that `EmitDeferred` is very global variable/function-oriented. This is the reason I added the checks. Does it make sense to defer non-static variables that end up somehow being treated as static ones?

https://github.com/llvm/llvm-project/pull/156933


More information about the cfe-commits mailing list