@@ -2596,13 +2596,14 @@ ConstraintResult GenericSignatureBuilder::handleUnresolvedRequirement(
2596
2596
// Function for feeding through any other requirements that the conformance
2597
2597
// requires to be satisfied. These are things we're inferring.
2598
2598
static void addConditionalRequirements (GenericSignatureBuilder &builder,
2599
- ProtocolConformanceRef conformance) {
2599
+ ProtocolConformanceRef conformance,
2600
+ ModuleDecl *inferForModule) {
2600
2601
// Abstract conformances don't have associated decl-contexts/modules, but also
2601
2602
// don't have conditional requirements.
2602
2603
if (conformance.isConcrete ()) {
2603
2604
auto source = FloatingRequirementSource::forInferred (nullptr );
2604
2605
for (auto requirement : conformance.getConditionalRequirements ()) {
2605
- builder.addRequirement (requirement, source, /* inferForModule= */ nullptr );
2606
+ builder.addRequirement (requirement, source, inferForModule);
2606
2607
++NumConditionalRequirementsAdded;
2607
2608
}
2608
2609
}
@@ -2646,7 +2647,7 @@ GenericSignatureBuilder::resolveConcreteConformance(ResolvedType type,
2646
2647
2647
2648
concreteSource = concreteSource->viaConcrete (*this , *conformance);
2648
2649
equivClass->recordConformanceConstraint (*this , type, proto, concreteSource);
2649
- addConditionalRequirements (*this , *conformance);
2650
+ addConditionalRequirements (*this , *conformance, /* inferForModule= */ nullptr );
2650
2651
return concreteSource;
2651
2652
}
2652
2653
const RequirementSource *GenericSignatureBuilder::resolveSuperConformance (
@@ -2677,7 +2678,7 @@ const RequirementSource *GenericSignatureBuilder::resolveSuperConformance(
2677
2678
superclassSource =
2678
2679
superclassSource->viaSuperclass (*this , *conformance);
2679
2680
equivClass->recordConformanceConstraint (*this , type, proto, superclassSource);
2680
- addConditionalRequirements (*this , *conformance);
2681
+ addConditionalRequirements (*this , *conformance, /* inferForModule= */ nullptr );
2681
2682
return superclassSource;
2682
2683
}
2683
2684
@@ -4718,10 +4719,7 @@ ConstraintResult GenericSignatureBuilder::addTypeRequirement(
4718
4719
4719
4720
// FIXME: diagnose if there's no conformance.
4720
4721
if (conformance) {
4721
- auto inferredSource = FloatingRequirementSource::forInferred (nullptr );
4722
- for (auto req : conformance->getConditionalRequirements ()) {
4723
- addRequirement (req, inferredSource, inferForModule);
4724
- }
4722
+ addConditionalRequirements (*this , *conformance, inferForModule);
4725
4723
}
4726
4724
}
4727
4725
}
0 commit comments