JVM_IR KT-49136 don't optimize null checks on fields and calls
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FULL_JDK
|
||||
// WITH_REFLECT
|
||||
|
||||
class A(val b: B)
|
||||
|
||||
class B(val c: String)
|
||||
|
||||
fun createByReflection(): A? =
|
||||
A(B("aaa")).apply {
|
||||
val field = javaClass.declaredFields.find { it.name == "b" }!!
|
||||
field.isAccessible = true
|
||||
field.set(this, null)
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val a = createByReflection()
|
||||
println(a?.b?.c)
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
abstract class Z {
|
||||
init {
|
||||
check(this)
|
||||
}
|
||||
|
||||
abstract val b: B
|
||||
}
|
||||
|
||||
class A(override val b: B) : Z()
|
||||
|
||||
class B(val c: String)
|
||||
|
||||
fun use(a: Any?) {}
|
||||
|
||||
fun check(z: Z) {
|
||||
use(z?.b?.c)
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
A(B(""))
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user