[clang] [Clang][Sema] Push an evaluation context for type constraints (PR #93945)
Younan Zhang via cfe-commits
cfe-commits at lists.llvm.org
Fri May 31 07:35:41 PDT 2024
================
@@ -5004,6 +5004,20 @@ static bool CheckDeducedPlaceholderConstraints(Sema &S, const AutoType &Type,
return true;
MultiLevelTemplateArgumentList MLTAL(Concept, CanonicalConverted,
/*Final=*/false);
+ // Build up an EvaluationContext with an ImplicitConceptSpecializationDecl so
+ // that the template arguments of the constraint can be preserved. For
+ // example:
+ //
+ // template <class T>
+ // concept C = []<D U = void>() { return true; }();
+ //
+ // We need the argument for T while evaluating type constraint D in
+ // building the CallExpr to the lambda.
+ EnterExpressionEvaluationContext EECtx(
+ S, Sema::ExpressionEvaluationContext::ConstantEvaluated,
----------------
zyn0217 wrote:
I changed these two to `Unevaluated` and all our tests were still passed.
> a bunch of bugs for evaluating that incorreclty.
Probably? Or it could be we have been pushing another unevaluated context during the evaluation, so the context kind here doesn't matter.
https://github.com/llvm/llvm-project/pull/93945
More information about the cfe-commits
mailing list