Skip to content

Commit 128a7ff

Browse files
authored
Merge pull request #18359 from rudkx/simplify-state-for-disjunction-choice
[ConstraintSystem] Hold slightly less state in DisjunctionChoice.
2 parents f74d61f + 7abf4b6 commit 128a7ff

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
@@ -2007,11 +2007,12 @@ bool ConstraintSystem::solveForDisjunctionChoices(
20072007
Optional<Score> bestNonGenericScore;
20082008

20092009
++solverState->NumDisjunctions;
2010+
bool explicitConversion = isExplicitConversionConstraint(disjunction);
20102011
auto constraints = disjunction->getNestedConstraints();
20112012
// Try each of the constraints within the disjunction.
20122013
for (auto index : indices(constraints)) {
20132014
auto currentChoice =
2014-
DisjunctionChoice(this, disjunction, constraints[index]);
2015+
DisjunctionChoice(this, constraints[index], explicitConversion);
20152016
if (shouldSkipDisjunctionChoice(*this, currentChoice, bestNonGenericScore))
20162017
continue;
20172018

@@ -2159,7 +2160,9 @@ DisjunctionChoice::solve(SmallVectorImpl<Solution> &solutions,
21592160
FreeTypeVariableBinding allowFreeTypeVariables) {
21602161
CS->simplifyDisjunctionChoice(Choice);
21612162

2162-
propagateConversionInfo();
2163+
if (ExplicitConversion)
2164+
propagateConversionInfo();
2165+
21632166
if (CS->solveRec(solutions, allowFreeTypeVariables))
21642167
return None;
21652168

@@ -2204,8 +2207,7 @@ bool DisjunctionChoice::isSymmetricOperator() const {
22042207
}
22052208

22062209
void DisjunctionChoice::propagateConversionInfo() const {
2207-
if (!CS->isExplicitConversionConstraint(Disjunction))
2208-
return;
2210+
assert(ExplicitConversion);
22092211

22102212
auto LHS = Choice->getFirstType();
22112213
auto typeVar = LHS->getAs<TypeVariableType>();

lib/Sema/ConstraintSystem.h

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

33503350
class DisjunctionChoice {
33513351
ConstraintSystem *CS;
3352-
Constraint *Disjunction;
33533352
Constraint *Choice;
3353+
bool ExplicitConversion;
33543354

33553355
public:
3356-
DisjunctionChoice(ConstraintSystem *const cs, Constraint *disjunction,
3357-
Constraint *choice)
3358-
: CS(cs), Disjunction(disjunction), Choice(choice) {}
3356+
DisjunctionChoice(ConstraintSystem *const cs, Constraint *choice,
3357+
bool explicitConversion)
3358+
: CS(cs), Choice(choice), ExplicitConversion(explicitConversion) {}
33593359

33603360
Constraint *operator->() const { return Choice; }
33613361

0 commit comments

Comments
 (0)