Skip to content

Commit 87cc597

Browse files
committed
[ConstraintSystem] Stop using CheckedConformances cache
It was necessary only for `applySolutionToForEachStmt` in `CSApply`, diagnostic can avoid it and use information stored in the locator instead.
1 parent 1143648 commit 87cc597

File tree

2 files changed

+7
-12
lines changed

2 files changed

+7
-12
lines changed

lib/Sema/CSApply.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7972,12 +7972,8 @@ static Optional<SolutionApplicationTarget> applySolutionToForEachStmt(
79727972
auto stmt = forEachStmtInfo.stmt;
79737973
auto sequenceProto = TypeChecker::getProtocol(
79747974
cs.getASTContext(), stmt->getForLoc(), KnownProtocolKind::Sequence);
7975-
auto contextualLocator = solution.getConstraintLocator(
7976-
target.getAsExpr(),
7977-
{LocatorPathElt::ContextualType(),
7978-
LocatorPathElt::ConformanceRequirement(sequenceProto)});
7979-
auto sequenceConformance =
7980-
solution.resolveConformance(contextualLocator, sequenceProto);
7975+
auto sequenceConformance = TypeChecker::conformsToProtocol(
7976+
forEachStmtInfo.sequenceType, sequenceProto, cs.DC);
79817977
assert(!sequenceConformance.isInvalid() &&
79827978
"Couldn't find sequence conformance");
79837979

lib/Sema/CSSimplify.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5721,18 +5721,17 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyConformsToConstraint(
57215721
/// Record the given conformance as the result, adding any conditional
57225722
/// requirements if necessary.
57235723
auto recordConformance = [&](ProtocolConformanceRef conformance) {
5724-
auto *conformanceLoc = getConstraintLocator(
5725-
loc, LocatorPathElt::ConformanceRequirement(protocol));
5726-
// Record the conformance.
5727-
CheckedConformances.push_back({conformanceLoc, conformance});
5728-
5729-
if (isConformanceUnavailable(conformance, conformanceLoc))
5724+
if (isConformanceUnavailable(conformance, loc))
57305725
increaseScore(SK_Unavailable);
57315726

57325727
// This conformance may be conditional, in which case we need to consider
57335728
// those requirements as constraints too.
57345729
if (conformance.isConcrete()) {
57355730
unsigned index = 0;
5731+
auto *conformanceLoc = getConstraintLocator(
5732+
loc,
5733+
LocatorPathElt::ConformanceRequirement(conformance.getConcrete()));
5734+
57365735
for (const auto &req : conformance.getConditionalRequirements()) {
57375736
addConstraint(
57385737
req, getConstraintLocator(conformanceLoc,

0 commit comments

Comments
 (0)