Skip to content

Commit 20d48d9

Browse files
committed
Only use shadowed when necessary
1 parent d1e4911 commit 20d48d9

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

compiler/src/dotty/tools/dotc/transform/ParamForwarding.scala

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,14 @@ class ParamForwarding(thisTransformer: DenotTransformer) {
6767
def forwarder(implicit ctx: Context) = {
6868
sym.copySymDenotation(initFlags = sym.flags | Method | Stable, info = sym.info.ensureMethodic)
6969
.installAfter(thisTransformer)
70-
val superAcc =
71-
Super(This(currentClass), tpnme.EMPTY, inConstrCall = false)
72-
.select(alias)
73-
val stpe @ TermRef(_, _) = superAcc.tpe
74-
val superAccShadowed = superAcc.withType(stpe.shadowed)
75-
typr.println(i"adding param forwarder $superAccShadowed")
76-
DefDef(sym, superAccShadowed.ensureConforms(sym.info.widen))
70+
var superAcc =
71+
Super(This(currentClass), tpnme.EMPTY, inConstrCall = false).select(alias)
72+
if (alias.owner != currentClass.superClass)
73+
// need to use shadowed in order not to accidentally address an
74+
// intervening private forwarder in the superclass
75+
superAcc = superAcc.withType(superAcc.tpe.asInstanceOf[TermRef].shadowed)
76+
typr.println(i"adding param forwarder $superAcc")
77+
DefDef(sym, superAcc.ensureConforms(sym.info.widen))
7778
}
7879
return forwarder(ctx.withPhase(thisTransformer.next))
7980
}

0 commit comments

Comments
 (0)