You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`order` takes `current` as input and returns a constraint set that subsumes both
`current` and `param1 <: param2`, but it's an instance method because it relies
on `this` to determine if `current` is used linearly such that we can reuse its
backing arrays instead of copying them. However, the implementation of `order`
mistakenly returned `this` and called methods on `this` instead of `current`.
This lead to issues like #11682 but that was compensated by logic inserted
in ConstraintHandling#addToConstraint which we can now remove.
Fixing this also required fixing an unrelated issue in avoidLambdaParams to
prevent a regression in tests/pos/i9676.scala: we shouldn't avoid a lambda param
under its own binder even if it is in `comparedTypeLambdas`, the sequence of
operations where this happens is:
[A] =>> List[A] <:< [A] =>> G[A]
// comparedTypeLambdas ++= ([A] =>> List[A], [A] =>> G[A])
List[A] <:< G[A]
[A] =>> List[A] <:< G
// previously, avoidLambdaParams([A] =>> List[A]) = [A] =>> List[Any],
// now it leaves the type lambda alone.
We end up checking `[A] =>> List[A] <:< G` instead of just `List <:< G` because
of `ensureLambdaSub` in `compareAppliedTypeParamRef`. I'm not sure if this is
actually needed, but I decided to not disturb that code too much for now.
0 commit comments