@@ -751,8 +751,8 @@ static const RequirementEnvironment &getOrCreateRequirementEnvironment(
751
751
}
752
752
753
753
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,
756
756
const RequirementEnvironment &reqEnvironment) {
757
757
Type type, missingType;
758
758
RequirementKind requirementKind;
@@ -784,9 +784,15 @@ static Optional<RequirementMatch> findMissingGenericRequirementForSolutionFix(
784
784
default :
785
785
return Optional<RequirementMatch>();
786
786
}
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;
790
796
791
797
auto missingRequirementMatch = [&](Type type) -> RequirementMatch {
792
798
Requirement requirement (requirementKind, type, missingType);
@@ -989,7 +995,7 @@ swift::matchWitness(WitnessChecker::RequirementEnvironmentCache &reqEnvCache,
989
995
if (solution && conformance && solution->Fixes .size ()) {
990
996
for (auto fix : solution->Fixes ) {
991
997
if (auto result = findMissingGenericRequirementForSolutionFix (
992
- fix, witness, conformance, reqEnvironment))
998
+ *solution, fix, witness, conformance, reqEnvironment))
993
999
return *result;
994
1000
}
995
1001
}
0 commit comments