Skip to content

Commit 8d21944

Browse files
committed
RequirementMachine: Use Requirement::checkRequirement() to desugar superclass requirements
1 parent 5882254 commit 8d21944

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

lib/AST/RequirementMachine/RequirementLowering.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,11 +250,27 @@ static void desugarSuperclassRequirement(Requirement req,
250250
return;
251251
}
252252

253-
if (req.getSecondType()->isExactSuperclassOf(req.getFirstType())) {
253+
SmallVector<Requirement, 2> subReqs;
254+
255+
switch (req.checkRequirement(subReqs)) {
256+
case CheckRequirementResult::Success:
257+
case CheckRequirementResult::PackRequirement:
254258
errors.push_back(RequirementError::forRedundantRequirement(req, loc));
255-
} else {
259+
break;
260+
261+
case CheckRequirementResult::RequirementFailure:
256262
errors.push_back(RequirementError::forInvalidRequirementSubject(req, loc));
263+
break;
264+
265+
case CheckRequirementResult::SubstitutionFailure:
266+
break;
267+
268+
case CheckRequirementResult::ConditionalConformance:
269+
llvm_unreachable("Unexpected CheckRequirementResult");
257270
}
271+
272+
for (auto subReq : subReqs)
273+
desugarRequirement(subReq, loc, result, errors);
258274
}
259275

260276
static void desugarLayoutRequirement(Requirement req,

0 commit comments

Comments
 (0)