[clang] [Clang] Instantiate functions from constant evaluation. (PR #205557)
Shafik Yaghmour via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 18 18:49:23 PDT 2026
================
@@ -22210,59 +22269,126 @@ bool Expr::EvaluateAsInitializer(const ASTContext &Ctx, const VarDecl *VD,
CheckMemoryLeaks(Info);
}
-bool VarDecl::evaluateDestruction(
- SmallVectorImpl<PartialDiagnosticAt> &Notes) const {
+bool Expr::EvaluateAsInitializer(const ASTContext &Ctx, const VarDecl *VD,
+ Expr::EvalResult &EStatus,
+ bool IsConstantInitialization) const {
+ assert(!isValueDependent() &&
+ "Expression evaluator can't be called on a dependent expression.");
+ assert(VD && "Need a valid VarDecl");
+
+ llvm::TimeTraceScope TimeScope("EvaluateAsInitializer", [&] {
+ std::string Name;
+ llvm::raw_string_ostream OS(Name);
+ VD->printQualifiedName(OS);
+ return Name;
+ });
+
+ EvalInfo Info(Ctx, /*Sema=*/nullptr, EStatus,
+ (IsConstantInitialization &&
+ (Ctx.getLangOpts().CPlusPlus || Ctx.getLangOpts().C23))
+ ? EvaluationMode::ConstantExpression
+ : EvaluationMode::ConstantFold);
+ Info.setEvaluatingDecl(VD, EStatus.Val);
+ Info.InConstantContext = IsConstantInitialization;
+
+ return ::EvaluateInitializer(Ctx, Info, VD, this, EStatus,
+ IsConstantInitialization);
+}
+
+bool Expr::EvaluateAsMandatedConstantInitializer(EvalResult &EStatus,
----------------
shafik wrote:
There is more code duplicate here, this one is not as totally duplicated but it is pretty darn close.
https://github.com/llvm/llvm-project/pull/205557
More information about the cfe-commits
mailing list