From 99079228d8b0cf15bd892c18cb040e79a3c0480a Mon Sep 17 00:00:00 2001 From: odersky Date: Tue, 3 May 2022 16:08:16 +0200 Subject: [PATCH] Eta expand CTFs in super accessors if needed Fixes #14999 --- .../dotty/tools/dotc/transform/ResolveSuper.scala | 11 ++++++----- tests/pos/i14999.scala | 13 +++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 tests/pos/i14999.scala 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)