================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits