[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