Skip to content

Commit 7abf4b6

Browse files
committed
[ConstraintSystem] Hold slightly less state in DisjunctionChoice.
We only care about whether the disjunction was created for an explicit conversion.
1 parent 65738ea commit 7abf4b6

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

lib/Sema/CSSolver.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2012,11 +2012,12 @@ bool ConstraintSystem::solveForDisjunctionChoices(
20122012
Optional<Score> bestNonGenericScore;
20132013

20142014
++solverState->NumDisjunctions;
2015+
bool explicitConversion = isExplicitConversionConstraint(disjunction);
20152016
auto constraints = disjunction->getNestedConstraints();
20162017
// Try each of the constraints within the disjunction.
20172018
for (auto index : indices(constraints)) {
20182019
auto currentChoice =
2019-
DisjunctionChoice(this, disjunction, constraints[index]);
2020+
DisjunctionChoice(this, constraints[index], explicitConversion);
20202021
if (shouldSkipDisjunctionChoice(*this, currentChoice, bestNonGenericScore))
20212022
continue;
20222023

@@ -2164,7 +2165,9 @@ DisjunctionChoice::solve(SmallVectorImpl<Solution> &solutions,
21642165
FreeTypeVariableBinding allowFreeTypeVariables) {
21652166
CS->simplifyDisjunctionChoice(Choice);
21662167

2167-
propagateConversionInfo();
2168+
if (ExplicitConversion)
2169+
propagateConversionInfo();
2170+
21682171
if (CS->solveRec(solutions, allowFreeTypeVariables))
21692172
return None;
21702173

@@ -2209,8 +2212,7 @@ bool DisjunctionChoice::isSymmetricOperator() const {
22092212
}
22102213

22112214
void DisjunctionChoice::propagateConversionInfo() const {
2212-
if (!CS->isExplicitConversionConstraint(Disjunction))
2213-
return;
2215+
assert(ExplicitConversion);
22142216

22152217
auto LHS = Choice->getFirstType();
22162218
auto typeVar = LHS->getAs<TypeVariableType>();

lib/Sema/ConstraintSystem.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3308,13 +3308,13 @@ void simplifyLocator(Expr *&anchor,
33083308

33093309
class DisjunctionChoice {
33103310
ConstraintSystem *CS;
3311-
Constraint *Disjunction;
33123311
Constraint *Choice;
3312+
bool ExplicitConversion;
33133313

33143314
public:
3315-
DisjunctionChoice(ConstraintSystem *const cs, Constraint *disjunction,
3316-
Constraint *choice)
3317-
: CS(cs), Disjunction(disjunction), Choice(choice) {}
3315+
DisjunctionChoice(ConstraintSystem *const cs, Constraint *choice,
3316+
bool explicitConversion)
3317+
: CS(cs), Choice(choice), ExplicitConversion(explicitConversion) {}
33183318

33193319
Constraint *operator->() const { return Choice; }
33203320

0 commit comments

Comments
 (0)