[clang] #141797 issue fixed (PR #166852)
Adamya Verma via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 6 13:42:36 PST 2025
https://github.com/Kirito-89 created https://github.com/llvm/llvm-project/pull/166852
Clang's constant evaluator would unconditionally reject the initializer of any [[gnu::weak]] variable. This was intended to prevent unsafe constant folding but also incorrectly blocked valid constant evaluation in C++14 (e.g., static constexpr initialization).
This patch refines the logic to only apply the check when the evaluation mode is not EvaluationMode::ConstantExpression. This fixes the bug by allowing required constexpr evaluation to proceed while still preventing unsafe folding in other contexts.
>From 253268dabad5b5d0ccba15ad1d532fda0916a1a2 Mon Sep 17 00:00:00 2001
From: Adamya Verma <cs23btech11001 at iith.ac.in>
Date: Fri, 7 Nov 2025 03:09:37 +0530
Subject: [PATCH] #141797 issue fixed
---
clang/lib/AST/ExprConstant.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 97eeba8b9d6cc..cb3a359a6df95 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -3611,7 +3611,7 @@ static bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E,
// Never use the initializer of a weak variable, not even for constant
// folding. We can't be sure that this is the definition that will be used.
- if (VD->isWeak()) {
+ if (VD->isWeak()&& (Info.EvalMode != EvaluationMode::ConstantExpression)) {
Info.FFDiag(E, diag::note_constexpr_var_init_weak) << VD;
NoteLValueLocation(Info, Base);
return false;
More information about the cfe-commits
mailing list