Skip to content

Commit b717138

Browse files
committed
GSB: Simplify addConditionalRequirements()
1 parent 5925cb2 commit b717138

File tree

3 files changed

+11
-33
lines changed

3 files changed

+11
-33
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2428,9 +2428,6 @@ WARNING(missing_protocol_refinement, none,
24282428
"protocol %0 should be declared to refine %1 due to a same-type constraint on 'Self'",
24292429
(ProtocolDecl *, ProtocolDecl *))
24302430

2431-
ERROR(unsupported_recursive_requirements, none,
2432-
"requirement involves recursion that is not currently supported", ())
2433-
24342431
ERROR(same_type_conflict,none,
24352432
"%select{generic parameter |protocol |}0%1 cannot be equal to both "
24362433
"%2 and %3", (unsigned, Type, Type, Type))

include/swift/AST/GenericSignatureBuilder.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,8 @@ class GenericSignatureBuilder {
342342
UnresolvedHandlingKind unresolvedHandling);
343343

344344
/// Add any conditional requirements from the given conformance.
345-
///
346-
/// \returns \c true if an error occurred, \c false if not.
347-
bool addConditionalRequirements(ProtocolConformanceRef conformance,
348-
ModuleDecl *inferForModule, SourceLoc loc);
345+
void addConditionalRequirements(ProtocolConformanceRef conformance,
346+
ModuleDecl *inferForModule);
349347

350348
/// Resolve the conformance of the given type to the given protocol when the
351349
/// potential archetype is known to be equivalent to a concrete type.

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2488,28 +2488,17 @@ ConstraintResult GenericSignatureBuilder::handleUnresolvedRequirement(
24882488
llvm_unreachable("unhandled handling");
24892489
}
24902490

2491-
bool GenericSignatureBuilder::addConditionalRequirements(
2492-
ProtocolConformanceRef conformance, ModuleDecl *inferForModule,
2493-
SourceLoc loc) {
2491+
void GenericSignatureBuilder::addConditionalRequirements(
2492+
ProtocolConformanceRef conformance, ModuleDecl *inferForModule) {
24942493
// Abstract conformances don't have associated decl-contexts/modules, but also
24952494
// don't have conditional requirements.
24962495
if (conformance.isConcrete()) {
2497-
if (auto condReqs = conformance.getConditionalRequirementsIfAvailable()) {
2498-
auto source = FloatingRequirementSource::forInferred(nullptr);
2499-
for (auto requirement : *condReqs) {
2500-
addRequirement(requirement, source, inferForModule);
2501-
++NumConditionalRequirementsAdded;
2502-
}
2503-
} else {
2504-
if (loc.isValid())
2505-
Diags.diagnose(loc, diag::unsupported_recursive_requirements);
2506-
2507-
Impl->HadAnyError = true;
2508-
return true;
2496+
auto source = FloatingRequirementSource::forInferred(nullptr);
2497+
for (auto requirement : conformance.getConditionalRequirements()) {
2498+
addRequirement(requirement, source, inferForModule);
2499+
++NumConditionalRequirementsAdded;
25092500
}
25102501
}
2511-
2512-
return false;
25132502
}
25142503

25152504
const RequirementSource *
@@ -2576,9 +2565,7 @@ GenericSignatureBuilder::resolveConcreteConformance(ResolvedType type,
25762565
});
25772566

25782567
if (hasExplicitSource) {
2579-
if (addConditionalRequirements(conformance, /*inferForModule=*/nullptr,
2580-
concreteSource->getLoc()))
2581-
return nullptr;
2568+
addConditionalRequirements(conformance, /*inferForModule=*/nullptr);
25822569
}
25832570

25842571
return concreteSource;
@@ -2619,9 +2606,7 @@ const RequirementSource *GenericSignatureBuilder::resolveSuperConformance(
26192606
});
26202607

26212608
if (hasExplicitSource) {
2622-
if (addConditionalRequirements(conformance, /*inferForModule=*/nullptr,
2623-
superclassSource->getLoc()))
2624-
return nullptr;
2609+
addConditionalRequirements(conformance, /*inferForModule=*/nullptr);
26252610
}
26262611

26272612
return superclassSource;
@@ -4833,9 +4818,7 @@ ConstraintResult GenericSignatureBuilder::addTypeRequirement(
48334818
if (conformance) {
48344819
// Only infer conditional requirements from explicit sources.
48354820
if (!source.isDerived()) {
4836-
if (addConditionalRequirements(conformance, inferForModule,
4837-
source.getLoc()))
4838-
return ConstraintResult::Conflicting;
4821+
addConditionalRequirements(conformance, inferForModule);
48394822
}
48404823
}
48414824
}

0 commit comments

Comments
 (0)