Skip to content

Commit d764fe8

Browse files
committed
Pass down solution to simplify types, and map missingType to translate taus to generic param names for emissions.
1 parent 6216242 commit d764fe8

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

lib/Sema/TypeCheckProtocol.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -751,8 +751,8 @@ static const RequirementEnvironment &getOrCreateRequirementEnvironment(
751751
}
752752

753753
static Optional<RequirementMatch> findMissingGenericRequirementForSolutionFix(
754-
constraints::ConstraintFix *fix, ValueDecl *witness,
755-
ProtocolConformance *conformance,
754+
constraints::Solution &solution, constraints::ConstraintFix *fix,
755+
ValueDecl *witness, ProtocolConformance *conformance,
756756
const RequirementEnvironment &reqEnvironment) {
757757
Type type, missingType;
758758
RequirementKind requirementKind;
@@ -784,9 +784,15 @@ static Optional<RequirementMatch> findMissingGenericRequirementForSolutionFix(
784784
default:
785785
return Optional<RequirementMatch>();
786786
}
787-
788-
if (missingType->hasTypeVariable())
789-
return Optional<RequirementMatch>();
787+
788+
type = solution.simplifyType(type);
789+
missingType = solution.simplifyType(missingType);
790+
791+
missingType = missingType->mapTypeOutOfContext();
792+
if (missingType->hasTypeParameter())
793+
if (auto env = conformance->getGenericEnvironment())
794+
if (auto assocType = env->mapTypeIntoContext(missingType))
795+
missingType = assocType;
790796

791797
auto missingRequirementMatch = [&](Type type) -> RequirementMatch {
792798
Requirement requirement(requirementKind, type, missingType);
@@ -989,7 +995,7 @@ swift::matchWitness(WitnessChecker::RequirementEnvironmentCache &reqEnvCache,
989995
if (solution && conformance && solution->Fixes.size()) {
990996
for (auto fix : solution->Fixes) {
991997
if (auto result = findMissingGenericRequirementForSolutionFix(
992-
fix, witness, conformance, reqEnvironment))
998+
*solution, fix, witness, conformance, reqEnvironment))
993999
return *result;
9941000
}
9951001
}

0 commit comments

Comments
 (0)