[clang] [Clang] Consider reachability for file-scope warnings on initializers (PR #163885)
Yanzuo Liu via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 19 00:36:20 PDT 2025
================
@@ -20544,31 +20544,40 @@ void Sema::MarkDeclarationsReferencedInExpr(Expr *E,
}
/// Emit a diagnostic when statements are reachable.
-/// FIXME: check for reachability even in expressions for which we don't build a
-/// CFG (eg, in the initializer of a global or in a constant expression).
-/// For example,
-/// namespace { auto *p = new double[3][false ? (1, 2) : 3]; }
bool Sema::DiagIfReachable(SourceLocation Loc, ArrayRef<const Stmt *> Stmts,
const PartialDiagnostic &PD) {
- if (!Stmts.empty() && getCurFunctionOrMethodDecl()) {
- if (!FunctionScopes.empty())
- FunctionScopes.back()->PossiblyUnreachableDiags.push_back(
- sema::PossiblyUnreachableDiag(PD, Loc, Stmts));
- return true;
- }
-
// The initializer of a constexpr variable or of the first declaration of a
// static data member is not syntactically a constant evaluated constant,
// but nonetheless is always required to be a constant expression, so we
// can skip diagnosing.
- // FIXME: Using the mangling context here is a hack.
if (auto *VD = dyn_cast_or_null<VarDecl>(
- ExprEvalContexts.back().ManglingContextDecl)) {
+ ExprEvalContexts.back().DeclForInitializer)) {
----------------
zwuis wrote:
`DeclForInitializer` is `VarDecl *` now. Ditto below.
https://github.com/llvm/llvm-project/pull/163885
More information about the cfe-commits
mailing list