JVM KT-47851 fix redundant checkcast elimination

This commit is contained in:
Dmitry Petrov
2021-11-18 20:12:38 +03:00
committed by teamcityserver
parent 8b066fd345
commit e525e25518
12 changed files with 187 additions and 4 deletions
@@ -0,0 +1,21 @@
// IGNORE_BACKEND_FIR: JVM_IR
// FIR status: result.getMethod OK in FE1.0, unresolved in FIR
class C(val value: String) {
fun getField() = value
fun getMethod() {}
}
fun foo(): Any {
var result: Any = ""
result = C("OK")
try {
result = result.getField()
} catch (e: Exception) {
result.getMethod()
}
return result
}
fun box() = foo().toString()
@@ -0,0 +1,30 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// FIR status: result.getMethod OK in FE1.0, unresolved in FIR
// WITH_RUNTIME
// FULL_JDK
val defaultStringConverter = fun(s: String): Any {
var result: Any = s
var m: Array<String>? = arrayOf("1", "2", "3", "4")
if (m != null) {
val fname = m[4]
try {
result = Class.forName(m[1])
if (fname != "") {
try {
val f = result.getField(fname)
result = f.get(null)
} catch (nfe: NoSuchFieldException) {
val meth = result.getMethod(fname)
}
}
} catch (cnfe: ClassNotFoundException) {
}
}
return result
}
// Just check that there's no VerifyError.
// Semantics is checked in kt47851.kt.
fun box() = "OK"