Skip to content

Commit 80f8487

Browse files
committed
RequirementMachine: Use Requirement::checkRequirement() to desugar layout requirements
1 parent 8d21944 commit 80f8487

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

lib/AST/RequirementMachine/RequirementLowering.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,12 +282,27 @@ static void desugarLayoutRequirement(Requirement req,
282282
return;
283283
}
284284

285-
if (req.getLayoutConstraint()->isClass() &&
286-
req.getFirstType()->isAnyClassReferenceType()) {
285+
SmallVector<Requirement, 2> subReqs;
286+
287+
switch (req.checkRequirement(subReqs)) {
288+
case CheckRequirementResult::Success:
289+
case CheckRequirementResult::PackRequirement:
287290
errors.push_back(RequirementError::forRedundantRequirement(req, loc));
288-
} else {
291+
break;
292+
293+
case CheckRequirementResult::RequirementFailure:
289294
errors.push_back(RequirementError::forInvalidRequirementSubject(req, loc));
295+
break;
296+
297+
case CheckRequirementResult::SubstitutionFailure:
298+
break;
299+
300+
case CheckRequirementResult::ConditionalConformance:
301+
llvm_unreachable("Unexpected CheckRequirementResult");
290302
}
303+
304+
for (auto subReq : subReqs)
305+
desugarRequirement(subReq, loc, result, errors);
291306
}
292307

293308
/// Desugar a protocol conformance requirement by splitting up protocol

0 commit comments

Comments
 (0)