[NCGenerics] fold InverseType into PCT

We already need to track the inverses separate from the members in a
ProtocolCompositionType, since inverses aren't real types. Thus, the
only purpose being served by InverseType is to be eliminated by
RequirementLowering when it appears in a conformance requirement.

Instead, we introduce separate type InverseRequirement just to keep
track of which inverses we encounter to facilitate cancelling-out
defaults and ensuring that the inverses are respected after running
the RequirementMachine.
This commit is contained in:
Kavon Farvardin
2023-12-01 21:33:54 -08:00
parent 684739e3ec
commit 63b3e7624d
39 changed files with 544 additions and 423 deletions

View File

@@ -5139,10 +5139,6 @@ public:
llvm_unreachable("modules are currently not first-class values");
}
void visitInverseType(const InverseType *) {
llvm_unreachable("inverse types should not escape the type checker");
}
void visitInOutType(const InOutType *) {
llvm_unreachable("inout types are only used in function type parameters");
}