Do not optimize == for KClasses in redundant boxing elimination

For primitive wrappers such as java.lang.Integer,
  jlc = java.lang.Integer.class
  jlt = java.lang.Integer.TYPE
  !(ljc.equals(ljt))
However, in Kotlin corresponding KClass instances are equal.

 #KT-17748 Fixed Target versions 1.1.50
 #KT-17879 Fixed Target versions 1.1.50
This commit is contained in:
Dmitry Petrov
2017-09-05 15:57:51 +03:00
parent 2b27e64fc8
commit 61faa068d4
7 changed files with 100 additions and 4 deletions
@@ -0,0 +1,20 @@
// IGNORE_BACKEND: JS, NATIVE
fun test(a: Any) = when (a::class) {
String::class -> "String"
Int::class -> "Int"
Boolean::class -> "Boolean"
else -> "Else"
}
fun box(): String {
val s = ""
val i = 0
val b = false
if (test(s) != "String") return "Fail 1"
if (test(i) != "Int") return "Fail 2"
if (test(b) != "Boolean") return "Fail 3"
return "OK"
}
@@ -0,0 +1,17 @@
// IGNORE_BACKEND: JS, NATIVE
fun box(): String {
42.doSwitchInt()
"".doSwitchString()
return "OK"
}
inline fun <reified E> E.doSwitchInt(): String = when (E::class) {
Int::class -> "success!"
else -> throw AssertionError()
}
inline fun <reified E> E.doSwitchString(): String = when(E::class) {
String::class -> "success!"
else -> throw AssertionError()
}