JVM IR: Always produce stubs for interface methods in inline classes
This matches the behavior of the JVM backend, with the exception of @JvmDefault methods, which are currently broken on the JVM backend.
This commit is contained in:
committed by
Alexander Udalov
parent
8c9ebc1bf9
commit
465e9f2d68
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// FILE: test.kt
|
||||
|
||||
fun box(): String {
|
||||
val b = B(0)
|
||||
return b.f() + b.g()
|
||||
}
|
||||
|
||||
interface A {
|
||||
fun f() = "O"
|
||||
fun g() = "K"
|
||||
}
|
||||
|
||||
inline class B(val x: Int) : A
|
||||
|
||||
// 1 public static f-impl\(I\)Ljava/lang/String;
|
||||
// 1 public f\(\)Ljava/lang/String;
|
||||
|
||||
// 1 public static g-impl\(I\)Ljava/lang/String;
|
||||
// 1 public g\(\)Ljava/lang/String;
|
||||
|
||||
// JVM_TEMPLATES:
|
||||
// The JVM backend calls f-impl, g-impl from f, g, respectively, in addition to the call from box.
|
||||
// 2 INVOKESTATIC B.g-impl \(I\)Ljava/lang/String;
|
||||
// 2 INVOKESTATIC B.f-impl \(I\)Ljava/lang/String;
|
||||
|
||||
// JVM_IR_TEMPLATES:
|
||||
// 1 INVOKESTATIC B.g-impl \(I\)Ljava/lang/String;
|
||||
// 1 INVOKESTATIC B.f-impl \(I\)Ljava/lang/String;
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
// IGNORE_BACKEND: JVM
|
||||
// The JVM backend does not generate the g-impl method, but ends up calling it from box.
|
||||
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// FILE: test.kt
|
||||
|
||||
|
||||
fun box(): String {
|
||||
val b = B(0)
|
||||
return b.f() + b.g()
|
||||
}
|
||||
|
||||
interface A {
|
||||
fun f() = "O"
|
||||
@JvmDefault
|
||||
fun g() = "K"
|
||||
}
|
||||
|
||||
inline class B(val x: Int) : A
|
||||
|
||||
// 1 public static f-impl\(I\)Ljava/lang/String;
|
||||
// 1 public f\(\)Ljava/lang/String;
|
||||
|
||||
// 1 public static g-impl\(I\)Ljava/lang/String;
|
||||
// 0 public g\(\)Ljava/lang/String;
|
||||
|
||||
// 1 INVOKESTATIC B.g-impl \(I\)Ljava/lang/String;
|
||||
|
||||
// JVM_TEMPLATES:
|
||||
// 2 INVOKESTATIC B.f-impl \(I\)Ljava/lang/String;
|
||||
|
||||
// JVM_IR_TEMPLATES:
|
||||
// 1 INVOKESTATIC B.f-impl \(I\)Ljava/lang/String;
|
||||
Reference in New Issue
Block a user