@@ -4555,23 +4555,11 @@ ConstraintResult GenericSignatureBuilder::addLayoutRequirementDirect(
4555
4555
resolvedSource, layout));
4556
4556
}
4557
4557
4558
- auto equivClass = type.getEquivalenceClass (*this );
4559
-
4560
4558
// Update the layout in the equivalence class, if we didn't have one already.
4561
- bool anyChanges = false ;
4562
- if (!equivClass->layout ) {
4563
- equivClass->layout = layout;
4564
- anyChanges = true ;
4565
- } else {
4566
- // Try to merge layout constraints.
4567
- auto mergedLayout = equivClass->layout .merge (layout);
4568
- if (mergedLayout->isKnownLayout () && mergedLayout != equivClass->layout ) {
4569
- equivClass->layout = mergedLayout;
4570
- anyChanges = true ;
4571
- }
4572
- }
4559
+ bool anyChanges = updateLayout (type, layout);
4573
4560
4574
4561
// Record this layout constraint.
4562
+ auto equivClass = type.getEquivalenceClass (*this );
4575
4563
equivClass->layoutConstraints .push_back ({type.getUnresolvedType (),
4576
4564
layout, resolvedSource});
4577
4565
equivClass->modified (*this );
@@ -4685,6 +4673,25 @@ bool GenericSignatureBuilder::updateSuperclass(
4685
4673
return false ;
4686
4674
}
4687
4675
4676
+ bool GenericSignatureBuilder::updateLayout (ResolvedType type,
4677
+ LayoutConstraint layout) {
4678
+ auto equivClass = type.getEquivalenceClass (*this );
4679
+
4680
+ if (!equivClass->layout ) {
4681
+ equivClass->layout = layout;
4682
+ return true ;
4683
+ }
4684
+
4685
+ // Try to merge layout constraints.
4686
+ auto mergedLayout = equivClass->layout .merge (layout);
4687
+ if (mergedLayout->isKnownLayout () && mergedLayout != equivClass->layout ) {
4688
+ equivClass->layout = mergedLayout;
4689
+ return true ;
4690
+ }
4691
+
4692
+ return false ;
4693
+ }
4694
+
4688
4695
ConstraintResult GenericSignatureBuilder::addSuperclassRequirementDirect (
4689
4696
ResolvedType type,
4690
4697
Type superclass,
@@ -5020,9 +5027,7 @@ GenericSignatureBuilder::addSameTypeRequirementBetweenTypeParameters(
5020
5027
equivClass->layout = equivClass2->layout ;
5021
5028
equivClass->layoutConstraints = std::move (equivClass2->layoutConstraints );
5022
5029
} else {
5023
- const RequirementSource *source2
5024
- = equivClass2->layoutConstraints .front ().source ;
5025
- addLayoutRequirementDirect (T1, equivClass2->layout , source2);
5030
+ updateLayout (T1, equivClass2->layout );
5026
5031
equivClass->layoutConstraints .insert (
5027
5032
equivClass->layoutConstraints .end (),
5028
5033
equivClass2->layoutConstraints .begin () + 1 ,
0 commit comments