Fix #11234: Avoid cycles in unifying F-bounded type parameters #11237
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix #11234
In tests/pos/11234.scala, we have the following F-bounded constraints:
As
Foo[T]
is non-variant, at some point we will addA0 <: A
, itwill trigger unification of
A0
andA
. The unification will callFoo[A0].&(Foo[A])
, which in turn callsTypeComparer.glb(Foo[A0], Foo[A])
. The callglb(Foo[A0], Foo[A])
in a fresh TypeComparerwill in turn add
A0 <: A
thus trigger the unification again.We need to perform substitution before merging the bounds.