JVM IR: Fix handling of anonymous initializers in inline classes (#4372)
Fixes KT-46554
This commit is contained in:
committed by
Alexander Udalov
parent
cc4c61d2b3
commit
b2378620c3
+21
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user