Files
kotlin-fork/compiler/testData/codegen/bytecodeText/interfaces/traitImplGeneratedOnce.kt
T
Denis.Zharkov a750d9466e FIR2IR: Rework resulted overridden-relation structure
The difference is how we deal with intermediate fake overrides
E.g., in case

interface A { /* $1 */ fun foo() }
interface B : A {
     /* $2 */ fake_override fun foo()
}
interface C : B {
   /* $3 */ override fun foo()
}

We've got FIR declarations only for $1 and $3, but we've got
a fake override for $2 in IR.

Previously, override $3 had $1 as its overridden IR symbol, just because
FIR declaration of $3 doesn't know anything about $2.

Now, when generating IR for $2, we save the necessary information
and using it for $3, so it has $2 as overridden.

So, it's consistent with the overridden structure of FE 1.0 and this
structure is necessary prerequisite for proper building of bridges
for special built-ins.
2021-02-20 10:59:22 +03:00

16 lines
256 B
Kotlin
Vendored

interface A {
fun foo() = 42
}
open class B : A
open class C : B()
class D : C()
// Implementation of foo() should only be generated into B
// 1 INVOKESTATIC A\$DefaultImpls.foo
// Only two declarations should be present: in A and B
// 2 foo\(\)I