Skip to content

Commit 7d3a891

Browse files
committed
GSB: Don't canonicalize concrete type or superclass of equivalence class
1 parent 319bc07 commit 7d3a891

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7860,8 +7860,6 @@ void GenericSignatureBuilder::checkConcreteTypeConstraints(
78607860
diag::same_type_conflict,
78617861
diag::redundant_same_type_to_concrete,
78627862
diag::same_type_redundancy_here);
7863-
7864-
equivClass->concreteType = resolvedConcreteType;
78657863
}
78667864

78677865
void GenericSignatureBuilder::checkSuperclassConstraints(
@@ -7898,9 +7896,6 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
78987896
diag::redundant_superclass_constraint,
78997897
diag::superclass_redundancy_here);
79007898

7901-
// Record the resolved superclass type.
7902-
equivClass->superclass = resolvedSuperclass;
7903-
79047899
// If we have a concrete type, check it.
79057900
// FIXME: Substitute into the concrete type.
79067901
if (equivClass->concreteType) {
@@ -8097,6 +8092,8 @@ void GenericSignatureBuilder::enumerateRequirements(
80978092
// If this equivalence class is bound to a concrete type, equate the
80988093
// anchor with a concrete type.
80998094
if (Type concreteType = equivClass.concreteType) {
8095+
concreteType = getCanonicalTypeInContext(concreteType, genericParams);
8096+
81008097
// If the parent of this anchor is also a concrete type, don't
81018098
// create a requirement.
81028099
if (!subjectType->is<GenericTypeParamType>() &&
@@ -8152,14 +8149,15 @@ void GenericSignatureBuilder::enumerateRequirements(
81528149
continue;
81538150

81548151
// 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>(
81598157
equivClass.superclassConstraints,
81608158
RequirementKind::Superclass, *this)) {
81618159
recordRequirement(RequirementKind::Superclass,
8162-
subjectType, equivClass.superclass);
8160+
subjectType, superclass);
81638161
}
81648162
}
81658163

0 commit comments

Comments
 (0)