@@ -7860,8 +7860,6 @@ void GenericSignatureBuilder::checkConcreteTypeConstraints(
7860
7860
diag::same_type_conflict,
7861
7861
diag::redundant_same_type_to_concrete,
7862
7862
diag::same_type_redundancy_here);
7863
-
7864
- equivClass->concreteType = resolvedConcreteType;
7865
7863
}
7866
7864
7867
7865
void GenericSignatureBuilder::checkSuperclassConstraints (
@@ -7898,9 +7896,6 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
7898
7896
diag::redundant_superclass_constraint,
7899
7897
diag::superclass_redundancy_here);
7900
7898
7901
- // Record the resolved superclass type.
7902
- equivClass->superclass = resolvedSuperclass;
7903
-
7904
7899
// If we have a concrete type, check it.
7905
7900
// FIXME: Substitute into the concrete type.
7906
7901
if (equivClass->concreteType ) {
@@ -8097,6 +8092,8 @@ void GenericSignatureBuilder::enumerateRequirements(
8097
8092
// If this equivalence class is bound to a concrete type, equate the
8098
8093
// anchor with a concrete type.
8099
8094
if (Type concreteType = equivClass.concreteType ) {
8095
+ concreteType = getCanonicalTypeInContext (concreteType, genericParams);
8096
+
8100
8097
// If the parent of this anchor is also a concrete type, don't
8101
8098
// create a requirement.
8102
8099
if (!subjectType->is <GenericTypeParamType>() &&
@@ -8152,14 +8149,15 @@ void GenericSignatureBuilder::enumerateRequirements(
8152
8149
continue ;
8153
8150
8154
8151
// If we have a superclass, produce a superclass requirement
8155
- if (equivClass.superclass &&
8156
- !equivClass.recursiveSuperclassType &&
8157
- !equivClass.superclass ->hasError ()) {
8158
- if (hasNonRedundantRequirementSource<Type>(
8152
+ if (auto superclass = equivClass.superclass ) {
8153
+ superclass = getCanonicalTypeInContext (superclass, genericParams);
8154
+
8155
+ if (!equivClass.recursiveSuperclassType &&
8156
+ hasNonRedundantRequirementSource<Type>(
8159
8157
equivClass.superclassConstraints ,
8160
8158
RequirementKind::Superclass, *this )) {
8161
8159
recordRequirement (RequirementKind::Superclass,
8162
- subjectType, equivClass. superclass );
8160
+ subjectType, superclass);
8163
8161
}
8164
8162
}
8165
8163
0 commit comments