Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix OrderingConstraint#order forgetting constraints; fix avoidLambdaP…
…arams `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 scala#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.
- Loading branch information