Skip to content

Commit e05078c

Browse files
oderskyKordyjan
authored andcommitted
Address review comments
[Cherry-picked c93765e]
1 parent 733eeed commit e05078c

File tree

4 files changed

+22
-2
lines changed

4 files changed

+22
-2
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,9 @@ class SuperAccessors(thisPhase: DenotTransformer) {
155155

156156
val needAccessor =
157157
name.isTermName // Types don't need super accessors
158-
&& !sym.isInlineMethod && ( // Inline methods can't be overridden, don't need superaccessors
159-
clazz != currentClass || !validCurrentClass || mix.name.isEmpty && clazz.is(Trait))
158+
&& !sym.isEffectivelyErased // Erased and concrete inline methods are not called at runtime
159+
&& !sym.isInlineMethod // so they don't need superaccessors.
160+
&& (clazz != currentClass || !validCurrentClass || mix.name.isEmpty && clazz.is(Trait))
160161

161162
if (needAccessor) atPhase(thisPhase.next)(superAccessorCall(sel, mix.name))
162163
else sel

tests/pos/i17584a.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
import language.experimental.erasedDefinitions
3+
trait A:
4+
erased def g = 1
5+
trait B extends A:
6+
erased def f = super.g
7+
class C extends B

tests/run/i17584.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ class C extends B
77
@main def Test =
88
val c = C()
99
assert(c.f == 1)
10+

tests/run/i17584a.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
trait T:
2+
def g = 2
3+
trait A extends T:
4+
inline override def g = 1
5+
trait B extends A:
6+
def f = super.g
7+
class C extends B
8+
9+
@main def Test =
10+
val c = C()
11+
assert(c.f == 1)

0 commit comments

Comments
 (0)