[clang] [Clang] Consider reachability for file-scope warnings on initializers (PR #163885)
Corentin Jabot via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 19 00:26:11 PDT 2025
================
@@ -581,3 +581,28 @@ bool Parser::ParseMicrosoftIfExistsBraceInitializer(ExprVector &InitExprs,
return !trailingComma;
}
+
+ExprResult Parser::ParseInitializer(Decl *DeclForInitializer) {
+ // Set DeclForInitializer for file-scope variables.
+ // For constexpr references, set it to suppress runtime warnings.
+ // For non-constexpr references, don't set it to avoid evaluation issues
+ // with self-referencing initializers. Local variables (including local
+ // constexpr) should emit runtime warnings.
+ if (DeclForInitializer && !Actions.ExprEvalContexts.empty()) {
+ if (auto *VD = dyn_cast<VarDecl>(DeclForInitializer);
+ VD && VD->isFileVarDecl()) {
+ if (!VD->getType()->isReferenceType() || VD->isConstexpr()) {
+ Actions.ExprEvalContexts.back().DeclForInitializer = VD;
+ }
----------------
cor3ntin wrote:
```suggestion
if (auto *VD = dyn_cast<VarDecl>(DeclForInitializer);
VD && VD->isFileVarDecl() && (!VD->getType()->isReferenceType() || VD->isConstexpr()))
Actions.ExprEvalContexts.back().DeclForInitializer = VD;
```
https://github.com/llvm/llvm-project/pull/163885
More information about the cfe-commits
mailing list