Skip to content

Commit 467edd8

Browse files
committed
Don't generate a super accessor for an inline method call
Inline methods cannot be overridden, so they don't need super accessors. Fixes #17584
1 parent 2e19304 commit 467edd8

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,9 @@ class SuperAccessors(thisPhase: DenotTransformer) {
153153
}
154154
}
155155

156-
val needAccessor = name.isTermName && (
156+
val needAccessor =
157+
name.isTermName // Types don't need super accessors
158+
&& !sym.isInlineMethod && ( // Inline methods can't be overridden, don't need superaccessors
157159
clazz != currentClass || !validCurrentClass || mix.name.isEmpty && clazz.is(Trait))
158160

159161
if (needAccessor) atPhase(thisPhase.next)(superAccessorCall(sel, mix.name))

tests/run/i17584.scala

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

0 commit comments

Comments
 (0)