@@ -16837,16 +16837,24 @@ ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
1683716837
1683816838 // FIXME: Transitional hack.
1683916839 bool enablePreparedOverloads = getASTContext().TypeCheckerOpts.SolverEnablePreparedOverloads;
16840+ bool forDiagnostics = inSalvageMode();
1684016841
16842+ // Don't reuse prepared overloads from normal type checking in salvage(),
16843+ // since they will contain fixes and such.
1684116844 auto *preparedOverload = constraint.getPreparedOverload();
16842- if (!preparedOverload) {
16843- if (enablePreparedOverloads &&
16844- constraint.getOverloadChoice().canBePrepared()) {
16845- preparedOverload = prepareOverload(constraint.getOverloadChoice(),
16846- constraint.getDeclContext(),
16847- constraint.getLocator());
16848- const_cast<Constraint &>(constraint).setPreparedOverload(preparedOverload);
16849- }
16845+ if (preparedOverload &&
16846+ preparedOverload->wasForDiagnostics() != forDiagnostics) {
16847+ preparedOverload = nullptr;
16848+ }
16849+
16850+ if (!preparedOverload &&
16851+ enablePreparedOverloads &&
16852+ constraint.getOverloadChoice().canBePrepared()) {
16853+ preparedOverload = prepareOverload(constraint.getOverloadChoice(),
16854+ constraint.getDeclContext(),
16855+ constraint.getLocator(),
16856+ forDiagnostics);
16857+ const_cast<Constraint &>(constraint).setPreparedOverload(preparedOverload);
1685016858 }
1685116859
1685216860 resolveOverload(constraint.getOverloadChoice(),
0 commit comments