Sema: Lazily build prepared overload when simplifying BindOverload constraint

This commit is contained in:
Slava Pestov
2025-07-11 16:11:19 -04:00
parent 44750115f0
commit 6e212de774
3 changed files with 25 additions and 18 deletions

View File

@@ -16648,7 +16648,7 @@ ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
constraint.getFirstType(), constraint.getSecondType(),
constraint.getThirdType(), std::nullopt, constraint.getLocator());
case ConstraintKind::BindOverload:
case ConstraintKind::BindOverload: {
if (auto *fix = constraint.getFix()) {
// TODO(diagnostics): Impact should be associated with a fix unless
// it's a contextual problem, then only solver can decide what the impact
@@ -16659,11 +16659,26 @@ ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
return SolutionKind::Error;
}
// FIXME: Transitional hack.
bool enablePreparedOverloads = false;
auto *preparedOverload = constraint.getPreparedOverload();
if (!preparedOverload) {
if (enablePreparedOverloads &&
constraint.getOverloadChoice().canBePrepared()) {
preparedOverload = prepareOverload(constraint.getLocator(),
constraint.getOverloadChoice(),
constraint.getDeclContext());
const_cast<Constraint &>(constraint).setPreparedOverload(preparedOverload);
}
}
resolveOverload(constraint.getLocator(), constraint.getFirstType(),
constraint.getOverloadChoice(),
constraint.getDeclContext(),
constraint.getPreparedOverload());
preparedOverload);
return SolutionKind::Solved;
}
case ConstraintKind::SubclassOf:
return simplifySubclassOfConstraint(constraint.getFirstType(),