@@ -4106,8 +4106,6 @@ static ConstraintResult visitInherited(
4106
4106
ConstraintResult result = ConstraintResult::Resolved;
4107
4107
std::function<void (Type, const TypeRepr *)> visitInherited;
4108
4108
4109
- // FIXME: Should this whole thing use getExistentialLayout() instead?
4110
-
4111
4109
visitInherited = [&](Type inheritedType, const TypeRepr *typeRepr) {
4112
4110
// Decompose explicitly-written protocol compositions.
4113
4111
if (auto composition = dyn_cast_or_null<CompositionTypeRepr>(typeRepr)) {
@@ -4938,6 +4936,22 @@ GenericSignatureBuilder::addSameTypeRequirementBetweenTypeParameters(
4938
4936
// Make T1 the representative of T2, merging the equivalence classes.
4939
4937
T2->representativeOrEquivClass = T1;
4940
4938
4939
+ // Layout requirements.
4940
+ if (equivClass2 && equivClass2->layout ) {
4941
+ if (!equivClass->layout ) {
4942
+ equivClass->layout = equivClass2->layout ;
4943
+ equivClass->layoutConstraints = std::move (equivClass2->layoutConstraints );
4944
+ } else {
4945
+ const RequirementSource *source2
4946
+ = equivClass2->layoutConstraints .front ().source ;
4947
+ addLayoutRequirementDirect (T1, equivClass2->layout , source2);
4948
+ equivClass->layoutConstraints .insert (
4949
+ equivClass->layoutConstraints .end (),
4950
+ equivClass2->layoutConstraints .begin () + 1 ,
4951
+ equivClass2->layoutConstraints .end ());
4952
+ }
4953
+ }
4954
+
4941
4955
// Superclass requirements.
4942
4956
if (equivClass2 && equivClass2->superclass ) {
4943
4957
const RequirementSource *source2;
0 commit comments