JVM IR: Fix handling of anonymous initializers in inline classes (#4372)

Fixes KT-46554
This commit is contained in:
Steven Schäfer
2021-05-11 11:42:11 +02:00
committed by Alexander Udalov
parent cc4c61d2b3
commit b2378620c3
14 changed files with 320 additions and 51 deletions
@@ -0,0 +1,21 @@
inline class IC private constructor(val i: Int) {
@Suppress("SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_INLINE_CLASS")
constructor() : this(0) {
counter += 1
}
}
var counter = 0
fun <T> id(t: T) = t
fun box(): String {
val ic = IC()
if (counter != 1) return "FAIL 1: $counter"
counter = 0
id(ic)
if (counter != 0) return "FAIL 2: $counter"
return "OK"
}
@@ -0,0 +1,17 @@
var result = "Fail"
inline class A(val value: String) {
init {
class B {
init {
result = value
}
}
B()
}
}
fun box(): String {
A("OK")
return result
}
@@ -0,0 +1,14 @@
var result = "Fail"
inline class A(val value: String)
inline class B(val a: A) {
init {
result = a.value
}
}
fun box(): String {
B(A("OK"))
return result
}
@@ -0,0 +1,16 @@
var result = "Fail"
inline class A(val value: String) {
fun f() = value + "K"
}
class B(val a: A) {
val result: String
init {
result = a.f()
}
}
fun box(): String {
return B(A("O")).result
}
+14
View File
@@ -0,0 +1,14 @@
var result = "Fail"
inline class A(val value: String) {
constructor() : this("OK")
init {
result = value
}
}
fun box(): String {
A()
return result
}