From 35f273ab07d9f1e65a662fb25a1aeebaba4552c2 Mon Sep 17 00:00:00 2001 From: Timm Baeder Date: Mon, 10 Mar 2025 08:56:23 +0100 Subject: [PATCH] [clang][NFC] Clean up Expr::EvaluateAsConstantExpr (#130498) The Info.EnableNewConstInterp case is already handled above. --- clang/lib/AST/ExprConstant.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 216bc478bb28b..4649cd79371f4 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -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))