Support additional intrinsics in null check elimination

1. checkExpressionValueIsNotNull implies checked value is non-null

2. throwNpe never returns

 #KT-18162 Fixed Target versions 1.1.4
 #KT-18164 Fixed Target versions 1.1.4
This commit is contained in:
Dmitry Petrov
2017-05-29 15:53:26 +03:00
parent d559212d70
commit 08885e273b
5 changed files with 197 additions and 30 deletions

View File

@@ -0,0 +1,23 @@
// FILE: j/J.java
package j;
public class J {
public static final String ok() { return "OK"; }
}
// FILE: k.kt
import j.J
fun foo(a: Any) {}
fun test() {
val a = J.ok()
foo(a)
if (a == null) foo("NULL-1")
}
// @KKt.class:
// 0 IFNULL
// 0 IFNONNULL
// 0 NULL-1

View File

@@ -0,0 +1,24 @@
// FILE: j/J.java
package j;
public class J {
public static final String ok() { return "OK"; }
}
// FILE: k.kt
import j.J
fun foo(a: Any) {}
fun test() {
val a = J.ok()
a!!
foo(a)
if (a == null) foo("NULL-1")
}
// @KKt.class:
// 0 IFNULL
// 1 IFNONNULL
// 0 NULL-1

View File

@@ -0,0 +1,23 @@
// FILE: j/J.java
package j;
public class J {
public static final String ok() { return "OK"; }
}
// FILE: foo.kt
fun foo(a: Any) {}
// FILE: k.kt
import j.J
fun test() {
val a = J.ok()
foo(a)
foo(a)
}
// @KKt.class:
// 1 LDC "a"
// 1 checkExpressionValueIsNotNull