Skip to content

Commit 6e39fcf

Browse files
committed
[GSB] Use addConditionalRequirements for all conditional-requirement-adding.
1 parent b49c43d commit 6e39fcf

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2596,13 +2596,14 @@ ConstraintResult GenericSignatureBuilder::handleUnresolvedRequirement(
25962596
// Function for feeding through any other requirements that the conformance
25972597
// requires to be satisfied. These are things we're inferring.
25982598
static void addConditionalRequirements(GenericSignatureBuilder &builder,
2599-
ProtocolConformanceRef conformance) {
2599+
ProtocolConformanceRef conformance,
2600+
ModuleDecl *inferForModule) {
26002601
// Abstract conformances don't have associated decl-contexts/modules, but also
26012602
// don't have conditional requirements.
26022603
if (conformance.isConcrete()) {
26032604
auto source = FloatingRequirementSource::forInferred(nullptr);
26042605
for (auto requirement : conformance.getConditionalRequirements()) {
2605-
builder.addRequirement(requirement, source, /*inferForModule=*/nullptr);
2606+
builder.addRequirement(requirement, source, inferForModule);
26062607
++NumConditionalRequirementsAdded;
26072608
}
26082609
}
@@ -2646,7 +2647,7 @@ GenericSignatureBuilder::resolveConcreteConformance(ResolvedType type,
26462647

26472648
concreteSource = concreteSource->viaConcrete(*this, *conformance);
26482649
equivClass->recordConformanceConstraint(*this, type, proto, concreteSource);
2649-
addConditionalRequirements(*this, *conformance);
2650+
addConditionalRequirements(*this, *conformance, /*inferForModule=*/nullptr);
26502651
return concreteSource;
26512652
}
26522653
const RequirementSource *GenericSignatureBuilder::resolveSuperConformance(
@@ -2677,7 +2678,7 @@ const RequirementSource *GenericSignatureBuilder::resolveSuperConformance(
26772678
superclassSource =
26782679
superclassSource->viaSuperclass(*this, *conformance);
26792680
equivClass->recordConformanceConstraint(*this, type, proto, superclassSource);
2680-
addConditionalRequirements(*this, *conformance);
2681+
addConditionalRequirements(*this, *conformance, /*inferForModule=*/nullptr);
26812682
return superclassSource;
26822683
}
26832684

@@ -4718,10 +4719,7 @@ ConstraintResult GenericSignatureBuilder::addTypeRequirement(
47184719

47194720
// FIXME: diagnose if there's no conformance.
47204721
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);
47254723
}
47264724
}
47274725
}

0 commit comments

Comments
 (0)