@@ -994,6 +994,39 @@ void GenericSignature::verify(ArrayRef<Requirement> reqts) const {
994994 }
995995}
996996
997+ static Type stripBoundDependentMemberTypes (Type t) {
998+ if (auto *depMemTy = t->getAs <DependentMemberType>()) {
999+ return DependentMemberType::get (
1000+ stripBoundDependentMemberTypes (depMemTy->getBase ()),
1001+ depMemTy->getName ());
1002+ }
1003+
1004+ return t;
1005+ }
1006+
1007+ static Requirement stripBoundDependentMemberTypes (Requirement req) {
1008+ auto subjectType = stripBoundDependentMemberTypes (req.getFirstType ());
1009+
1010+ switch (req.getKind ()) {
1011+ case RequirementKind::Conformance:
1012+ return Requirement (RequirementKind::Conformance, subjectType,
1013+ req.getSecondType ());
1014+
1015+ case RequirementKind::Superclass:
1016+ case RequirementKind::SameType:
1017+ return Requirement (req.getKind (), subjectType,
1018+ req.getSecondType ().transform ([](Type t) {
1019+ return stripBoundDependentMemberTypes (t);
1020+ }));
1021+
1022+ case RequirementKind::Layout:
1023+ return Requirement (RequirementKind::Layout, subjectType,
1024+ req.getLayoutConstraint ());
1025+ }
1026+
1027+ llvm_unreachable (" Bad requirement kind" );
1028+ }
1029+
9971030void swift::validateGenericSignature (ASTContext &context,
9981031 GenericSignature sig) {
9991032 llvm::errs () << " Validating generic signature: " ;
@@ -1007,7 +1040,7 @@ void swift::validateGenericSignature(ASTContext &context,
10071040
10081041 SmallVector<Requirement, 2 > requirements;
10091042 for (auto requirement : sig.getRequirements ())
1010- requirements.push_back (requirement);
1043+ requirements.push_back (stripBoundDependentMemberTypes ( requirement) );
10111044
10121045 {
10131046 PrettyStackTraceGenericSignature debugStack (" verifying" , sig);
@@ -1043,7 +1076,7 @@ void swift::validateGenericSignature(ASTContext &context,
10431076 SmallVector<Requirement, 2 > newRequirements;
10441077 for (unsigned i : indices (requirements)) {
10451078 if (i != victimIndex)
1046- newRequirements.push_back (requirements[i]);
1079+ newRequirements.push_back (stripBoundDependentMemberTypes ( requirements[i]) );
10471080 }
10481081
10491082 auto newSigWithError = evaluateOrDefault (
0 commit comments