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
Fix condition in prefixIsElidable to prevent compiler crash (#18924)
Fix#18901
The check in `prefixIsElidable` was defined as follows:
```scala
tp.symbol.isParamOrAccessor && !pre.cls.is(Trait) && ctx.owner.enclosingClass == pre.cls
```
I assume that `!pre.cls.is(Trait)` condition was introduced to
accommodate for `Mixin` phase getting rid of `ParamAccessor` defined in
traits. However, the prefix does not indicate where the symbol is really
defined - it only represents the prefix from the perspective of the
current template, so it could be inherited. When it's inherited from a
trait, the prefix would be the current class, but the member still is
defined in the trait, and `Mixin` would get rid of the `ParamAccessor`
flag. Therefore, I changed this condition to the following:
```scala
tp.symbol.isParamOrAccesso && !pre.cls.is(Trait) && !tp.symbol.owner.is(Trait) && ctx.owner.enclosingClass == pre.cls
```
0 commit comments