[clang] [Clang] Instantiate constexpr function when they are needed. (PR #173537)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 9 06:57:46 PST 2026


================
@@ -1526,13 +1527,30 @@ bool CheckFunctionDecl(InterpState &S, CodePtr OpPC, const FunctionDecl *FD) {
   return diagnoseCallableDecl(S, OpPC, FD);
 }
 
-static void compileFunction(InterpState &S, const Function *Func) {
-  const FunctionDecl *Definition = Func->getDecl()->getDefinition();
-  if (!Definition)
+static void compileFunction(InterpState &S, const Function *Func,
+                            SourceLocation Loc) {
+
+  const FunctionDecl *Fn = Func->getDecl();
+
+  // [C++26] [temp.inst] p5
+  // [...] the function template specialization is implicitly instantiated
+  // when the specialization is referenced in a context that requires a function
+  // definition to exist or if the existence of the definition affects the
+  // semantics of the program.
+  if (!Fn->isDefined() && Fn->isImplicitlyInstantiable() && Fn->isConstexpr() &&
+      S.inConstantContext() && !S.TryConstantInitialization &&
+      !S.checkingPotentialConstantExpression()) {
----------------
erichkeane wrote:

I commented above, I think there is value in this being TWO functions for htis condition.

ONE for hte `function` condition and one for the State.  I'm not clever enough/nor understand it well enough to come up with good names though.  BUT something where this is:

`if (Fn->canBeAndNeedsConstexprEvaluationTimeInstantationOrSomethingOfThatSort() && S.evaluatingConstantExprSituationWhereWeProbablyShouldInstantiateConstexprFunctionsSometimesWhoKnowsWhatever())`

might be nice.

https://github.com/llvm/llvm-project/pull/173537


More information about the cfe-commits mailing list