diff --git a/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala b/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala index 621935df6bb8..dd109ce153eb 100644 --- a/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala +++ b/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala @@ -48,11 +48,12 @@ class ResolveSuper extends MiniPhase with IdentityDenotTransformer { thisPhase = import ops._ def superAccessors(mixin: ClassSymbol): List[Tree] = - for (superAcc <- mixin.info.decls.filter(_.isSuperAccessor)) - yield { - util.Stats.record("super accessors") - DefDef(mkForwarderSym(superAcc.asTerm), forwarderRhsFn(rebindSuper(cls, superAcc))) - } + for superAcc <- mixin.info.decls.filter(_.isSuperAccessor) + yield + util.Stats.record("super accessors") + val fwd = mkForwarderSym(superAcc.asTerm) + DefDef(fwd, forwarderRhsFn(rebindSuper(cls, superAcc)) + .andThen(_.etaExpandCFT(using ctx.withOwner(fwd)))) val overrides = mixins.flatMap(superAccessors) diff --git a/tests/pos/i14999.scala b/tests/pos/i14999.scala new file mode 100644 index 000000000000..1b32361e5e52 --- /dev/null +++ b/tests/pos/i14999.scala @@ -0,0 +1,13 @@ +trait Foo: + def foo: String ?=> Int = + summon[String].length + +trait Bar extends Foo: + override def foo = + super.foo + +class Baz extends Bar + +@main def Test = + given String = "hello" + assert(Baz().foo == 5)