[clang][NFC] Clean up Expr::EvaluateAsConstantExpr (#130498)

The Info.EnableNewConstInterp case is already handled above.
This commit is contained in:
Timm Baeder 2025-03-10 08:56:23 +01:00 committed by GitHub
parent 6e8d7e2e7f
commit 35f273ab07
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -16903,24 +16903,19 @@ bool Expr::EvaluateAsConstantExpr(EvalResult &Result, const ASTContext &Ctx,
APValue::LValueBase Base(&BaseMTE);
Info.setEvaluatingDecl(Base, Result.Val);
if (Info.EnableNewConstInterp) {
if (!Info.Ctx.getInterpContext().evaluateAsRValue(Info, this, Result.Val))
return false;
} else {
LValue LVal;
LVal.set(Base);
// C++23 [intro.execution]/p5
// A full-expression is [...] a constant-expression
// So we need to make sure temporary objects are destroyed after having
// evaluating the expression (per C++23 [class.temporary]/p4).
FullExpressionRAII Scope(Info);
if (!::EvaluateInPlace(Result.Val, Info, LVal, this) ||
Result.HasSideEffects || !Scope.destroy())
return false;
LValue LVal;
LVal.set(Base);
// C++23 [intro.execution]/p5
// A full-expression is [...] a constant-expression
// So we need to make sure temporary objects are destroyed after having
// evaluating the expression (per C++23 [class.temporary]/p4).
FullExpressionRAII Scope(Info);
if (!::EvaluateInPlace(Result.Val, Info, LVal, this) ||
Result.HasSideEffects || !Scope.destroy())
return false;
if (!Info.discardCleanups())
llvm_unreachable("Unhandled cleanup; missing full expression marker?");
}
if (!Info.discardCleanups())
llvm_unreachable("Unhandled cleanup; missing full expression marker?");
if (!CheckConstantExpression(Info, getExprLoc(), getStorageType(Ctx, this),
Result.Val, Kind))