@@ -3759,8 +3759,7 @@ GenericSignatureBuilder::lookupConformance(CanType dependentType,
3759
3759
static Type resolveDependentMemberTypes (
3760
3760
GenericSignatureBuilder &builder,
3761
3761
Type type,
3762
- ArchetypeResolutionKind resolutionKind
3763
- = ArchetypeResolutionKind::WellFormed) {
3762
+ ArchetypeResolutionKind resolutionKind) {
3764
3763
if (!type->hasTypeParameter ()) return type;
3765
3764
3766
3765
return type.transformRec ([&resolutionKind,
@@ -6195,7 +6194,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
6195
6194
6196
6195
if (equivClass.concreteType ) {
6197
6196
Type resolvedConcreteType =
6198
- resolveDependentMemberTypes (* this , equivClass.concreteType );
6197
+ getCanonicalTypeInContext ( equivClass.concreteType , { } );
6199
6198
graph.addConstraintsFromEquivClass (
6200
6199
*this , equivClass.concreteTypeConstraints ,
6201
6200
RequirementKind::SameType,
@@ -6216,7 +6215,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
6216
6215
if (t->isEqual (resolvedConcreteType))
6217
6216
return false ;
6218
6217
6219
- auto resolvedType = resolveDependentMemberTypes (* this , t );
6218
+ auto resolvedType = getCanonicalTypeInContext (t, { } );
6220
6219
if (resolvedType->isEqual (resolvedConcreteType))
6221
6220
return false ;
6222
6221
@@ -6228,7 +6227,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
6228
6227
if (equivClass.superclass ) {
6229
6228
// Resolve any thus-far-unresolved dependent types.
6230
6229
Type resolvedSuperclass =
6231
- resolveDependentMemberTypes (* this , equivClass.superclass );
6230
+ getCanonicalTypeInContext ( equivClass.superclass , { } );
6232
6231
graph.addConstraintsFromEquivClass (
6233
6232
*this , equivClass.superclassConstraints ,
6234
6233
RequirementKind::Superclass,
@@ -6249,7 +6248,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
6249
6248
if (t->isEqual (resolvedSuperclass))
6250
6249
return false ;
6251
6250
6252
- Type resolvedType = resolveDependentMemberTypes (* this , t );
6251
+ Type resolvedType = getCanonicalTypeInContext (t, { } );
6253
6252
if (resolvedType->isEqual (resolvedSuperclass))
6254
6253
return false ;
6255
6254
@@ -7812,16 +7811,15 @@ void GenericSignatureBuilder::checkConcreteTypeConstraints(
7812
7811
EquivalenceClass *equivClass) {
7813
7812
// Resolve any thus-far-unresolved dependent types.
7814
7813
Type resolvedConcreteType =
7815
- resolveDependentMemberTypes (* this , equivClass->concreteType );
7814
+ getCanonicalTypeInContext ( equivClass->concreteType , genericParams );
7816
7815
7817
7816
checkConstraintList<Type>(
7818
7817
genericParams, equivClass->concreteTypeConstraints , RequirementKind::SameType,
7819
7818
[&](const ConcreteConstraint &constraint) {
7820
7819
if (constraint.value ->isEqual (resolvedConcreteType))
7821
7820
return true ;
7822
7821
7823
- auto resolvedType =
7824
- resolveDependentMemberTypes (*this , constraint.value );
7822
+ auto resolvedType = getCanonicalTypeInContext (constraint.value , { });
7825
7823
return resolvedType->isEqual (resolvedConcreteType);
7826
7824
},
7827
7825
[&](const Constraint<Type> &constraint) {
@@ -7854,7 +7852,7 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
7854
7852
7855
7853
// Resolve any thus-far-unresolved dependent types.
7856
7854
Type resolvedSuperclass =
7857
- resolveDependentMemberTypes (* this , equivClass->superclass );
7855
+ getCanonicalTypeInContext ( equivClass->superclass , genericParams );
7858
7856
7859
7857
auto representativeConstraint =
7860
7858
checkConstraintList<Type>(
@@ -7864,7 +7862,7 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
7864
7862
return true ;
7865
7863
7866
7864
Type resolvedType =
7867
- resolveDependentMemberTypes (* this , constraint.value );
7865
+ getCanonicalTypeInContext ( constraint.value , { } );
7868
7866
return resolvedType->isEqual (resolvedSuperclass);
7869
7867
},
7870
7868
[&](const Constraint<Type> &constraint) {
@@ -7888,7 +7886,7 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
7888
7886
// FIXME: Substitute into the concrete type.
7889
7887
if (equivClass->concreteType ) {
7890
7888
Type resolvedConcreteType =
7891
- resolveDependentMemberTypes (* this , equivClass->concreteType );
7889
+ getCanonicalTypeInContext ( equivClass->concreteType , genericParams );
7892
7890
auto existing = equivClass->findAnyConcreteConstraintAsWritten ();
7893
7891
// Make sure the concrete type fulfills the superclass requirement.
7894
7892
if (!equivClass->superclass ->isExactSuperclassOf (resolvedConcreteType)){
0 commit comments