Limit "always null" scope: only for !!, is and dot; senseless comparison rolled back; "smart constant" information for nulls #KT-10029 Fixed
This commit is contained in:
@@ -5,24 +5,24 @@ class A() {
|
||||
fun f(): Unit {
|
||||
var x: Int? = <!VARIABLE_WITH_REDUNDANT_INITIALIZER!>1<!>
|
||||
x = null
|
||||
<!ALWAYS_NULL!>x<!> <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
<!ALWAYS_NULL!>x<!> <!UNSAFE_INFIX_CALL, INFIX_MODIFIER_REQUIRED!>plus<!> 1
|
||||
<!ALWAYS_NULL!>x<!> <!UNSAFE_INFIX_CALL!><<!> 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> <!UNSAFE_INFIX_CALL, INFIX_MODIFIER_REQUIRED!>plus<!> 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> <!UNSAFE_INFIX_CALL!><<!> 1
|
||||
x <!UNSAFE_INFIX_CALL!>+=<!> 1
|
||||
|
||||
<!ALWAYS_NULL!>x<!> == 1
|
||||
<!ALWAYS_NULL!>x<!> != 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> == 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> != 1
|
||||
|
||||
<!EQUALITY_NOT_APPLICABLE!>A() == 1<!>
|
||||
|
||||
<!EQUALITY_NOT_APPLICABLE!><!ALWAYS_NULL!>x<!> === "1"<!>
|
||||
<!EQUALITY_NOT_APPLICABLE!><!ALWAYS_NULL!>x<!> !== "1"<!>
|
||||
<!EQUALITY_NOT_APPLICABLE!><!DEBUG_INFO_CONSTANT!>x<!> === "1"<!>
|
||||
<!EQUALITY_NOT_APPLICABLE!><!DEBUG_INFO_CONSTANT!>x<!> !== "1"<!>
|
||||
|
||||
<!ALWAYS_NULL!>x<!> === 1
|
||||
<!ALWAYS_NULL!>x<!> !== 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> === 1
|
||||
<!DEBUG_INFO_CONSTANT!>x<!> !== 1
|
||||
|
||||
<!ALWAYS_NULL!>x<!><!UNSAFE_INFIX_CALL!>..<!>2
|
||||
<!ALWAYS_NULL, TYPE_MISMATCH!>x<!> in 1..2
|
||||
<!DEBUG_INFO_CONSTANT!>x<!><!UNSAFE_INFIX_CALL!>..<!>2
|
||||
<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!> in 1..2
|
||||
|
||||
val y : Boolean? = true
|
||||
<!UNUSED_EXPRESSION!>false || <!TYPE_MISMATCH!>y<!><!>
|
||||
|
||||
+8
-8
@@ -4,7 +4,7 @@ fun test() {
|
||||
<!DEBUG_INFO_SMARTCAST!>a<!>.plus(1)
|
||||
}
|
||||
else {
|
||||
<!ALWAYS_NULL!>a<!>?.plus(1)
|
||||
<!DEBUG_INFO_CONSTANT!>a<!>?.plus(1)
|
||||
}
|
||||
|
||||
val out : java.io.PrintStream? = null
|
||||
@@ -28,7 +28,7 @@ fun test() {
|
||||
}
|
||||
|
||||
if (out == null) {
|
||||
<!ALWAYS_NULL!>out<!>?.println()
|
||||
<!DEBUG_INFO_CONSTANT!>out<!>?.println()
|
||||
} else {
|
||||
<!DEBUG_INFO_SMARTCAST!>out<!>.println()
|
||||
}
|
||||
@@ -88,7 +88,7 @@ fun test() {
|
||||
}
|
||||
|
||||
if (out == null) {
|
||||
<!ALWAYS_NULL!>out<!>?.println()
|
||||
<!DEBUG_INFO_CONSTANT!>out<!>?.println()
|
||||
} else {
|
||||
<!DEBUG_INFO_SMARTCAST!>out<!>.println()
|
||||
}
|
||||
@@ -140,12 +140,12 @@ fun test() {
|
||||
while (out != null) {
|
||||
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
|
||||
}
|
||||
<!ALWAYS_NULL!>out<!>?.println();
|
||||
<!DEBUG_INFO_CONSTANT!>out<!>?.println();
|
||||
|
||||
val out2 : java.io.PrintStream? = null
|
||||
|
||||
while (out2 == null) {
|
||||
<!ALWAYS_NULL!>out2<!>?.println();
|
||||
<!DEBUG_INFO_CONSTANT!>out2<!>?.println();
|
||||
<!ALWAYS_NULL!>out2<!><!UNSAFE_CALL!>.<!>println();
|
||||
}
|
||||
<!DEBUG_INFO_SMARTCAST!>out2<!>.println()
|
||||
@@ -235,7 +235,7 @@ fun f7(s : String?, t : String?) {
|
||||
}
|
||||
s?.get(0)
|
||||
if (!(s != null)) {
|
||||
<!ALWAYS_NULL!>s<!>?.get(0)
|
||||
<!DEBUG_INFO_CONSTANT!>s<!>?.get(0)
|
||||
}
|
||||
else {
|
||||
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
|
||||
@@ -245,7 +245,7 @@ fun f7(s : String?, t : String?) {
|
||||
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
|
||||
}
|
||||
else {
|
||||
<!ALWAYS_NULL!>s<!>?.get(0)
|
||||
<!DEBUG_INFO_CONSTANT!>s<!>?.get(0)
|
||||
}
|
||||
s?.get(0)
|
||||
t?.get(0)
|
||||
@@ -264,7 +264,7 @@ fun f7(s : String?, t : String?) {
|
||||
t?.get(0)
|
||||
}
|
||||
else {
|
||||
<!ALWAYS_NULL!>s<!>?.get(0)
|
||||
<!DEBUG_INFO_CONSTANT!>s<!>?.get(0)
|
||||
t?.get(0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ fun foo() {
|
||||
val x: Int? = null
|
||||
val a = Array<Int>(3, {0})
|
||||
|
||||
if (x != null) bar(a[<!DEBUG_INFO_SMARTCAST!>x<!>]) else bar(a[<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>])
|
||||
if (x != null) bar(a[<!DEBUG_INFO_SMARTCAST!>x<!>]) else bar(a[<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!>])
|
||||
bar(a[if (x == null) 0 else <!DEBUG_INFO_SMARTCAST!>x<!>])
|
||||
bar(a[<!TYPE_MISMATCH!>x<!>])
|
||||
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@ fun foo() {
|
||||
val x: Int? = null
|
||||
|
||||
bar(1 + (if (x == null) 0 else x))
|
||||
bar(if (x == null) <!ALWAYS_NULL, TYPE_MISMATCH!>x<!> else x)
|
||||
bar(if (x == null) <!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!> else x)
|
||||
if (x != null) bar(x + x/(x-x*x))
|
||||
}
|
||||
|
||||
@@ -16,15 +16,15 @@ fun foo() {
|
||||
}
|
||||
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(x) else bar(x)
|
||||
bar(bar(x))
|
||||
} else if (<!ALWAYS_NULL!>x<!> == null) {
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
if (<!ALWAYS_NULL!>x<!> != null) {
|
||||
} else if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>x<!> == null<!>) {
|
||||
bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!>)
|
||||
if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>x<!> != null<!>) {
|
||||
bar(x)
|
||||
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(x)
|
||||
if (<!SENSELESS_COMPARISON!>x == null<!>) bar(x) else bar(x)
|
||||
bar(bar(x) + bar(x))
|
||||
} else if (<!ALWAYS_NULL!>x<!> == null) {
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
} else if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>x<!> == null<!>) {
|
||||
bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!>)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,5 +12,5 @@ fun foo() {
|
||||
do {
|
||||
bar(<!TYPE_MISMATCH!>y<!>)
|
||||
} while (y != null)
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>y<!>)
|
||||
bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>y<!>)
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ fun foo() {
|
||||
bar(if (x == null) 0 else <!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
|
||||
if (x == null) {
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!>)
|
||||
return
|
||||
} else {
|
||||
bar(<!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@ fun foo() {
|
||||
|
||||
val <!UNUSED_VARIABLE!>a<!> = object {
|
||||
fun baz() = bar(if (x == null) 0 else <!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
fun quux(): Int = if (x == null) <!ALWAYS_NULL, TYPE_MISMATCH!>x<!> else <!DEBUG_INFO_SMARTCAST!>x<!>
|
||||
fun quux(): Int = if (x == null) <!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!> else <!DEBUG_INFO_SMARTCAST!>x<!>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,10 +8,10 @@ fun foo(): Int {
|
||||
if (x != null) return x
|
||||
|
||||
val y: Int? = null
|
||||
if (y == null) return if (<!ALWAYS_NULL!>y<!> != null) y else <!ALWAYS_NULL, TYPE_MISMATCH!>y<!>
|
||||
if (y == null) return if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>y<!> != null<!>) y else <!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>y<!>
|
||||
|
||||
val z: Int? = null
|
||||
if (z != null) return if (<!SENSELESS_COMPARISON!>z == null<!>) z else z
|
||||
|
||||
return <!ALWAYS_NULL, TYPE_MISMATCH!>z<!>
|
||||
return <!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>z<!>
|
||||
}
|
||||
|
||||
@@ -16,6 +16,6 @@ class Derived : Base() {
|
||||
|
||||
val y: Int? = null
|
||||
if (y != null) super.bar(this.baz(<!DEBUG_INFO_SMARTCAST!>y<!>))
|
||||
else this.baz(super.bar(<!ALWAYS_NULL, TYPE_MISMATCH!>y<!>))
|
||||
else this.baz(super.bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>y<!>))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ fun bar(x: Int): RuntimeException = RuntimeException(x.toString())
|
||||
fun foo() {
|
||||
val x: Int? = null
|
||||
|
||||
if (x == null) throw bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
if (x == null) throw bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!>)
|
||||
throw bar(<!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
<!UNREACHABLE_CODE!>throw bar(<!DEBUG_INFO_SMARTCAST!>x<!>)<!>
|
||||
}
|
||||
@@ -3,7 +3,7 @@ fun bar(x: Int): Int = x + 1
|
||||
fun foo() {
|
||||
val x: Int? = null
|
||||
while (x == null) {
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!>)
|
||||
}
|
||||
bar(<!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
|
||||
@@ -11,11 +11,11 @@ fun foo() {
|
||||
while (y != null) {
|
||||
bar(<!DEBUG_INFO_SMARTCAST!>y<!>)
|
||||
}
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>y<!>)
|
||||
bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>y<!>)
|
||||
|
||||
val z: Int? = null
|
||||
while (z == null) {
|
||||
bar(<!ALWAYS_NULL, TYPE_MISMATCH!>z<!>)
|
||||
bar(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>z<!>)
|
||||
break
|
||||
}
|
||||
bar(<!TYPE_MISMATCH!>z<!>)
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ interface A<T>
|
||||
fun <T> infer(<!UNUSED_PARAMETER!>a<!>: A<T>) : T {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
|
||||
fun test(nothing: Nothing?) {
|
||||
val <!UNUSED_VARIABLE!>i<!> = <!TYPE_INFERENCE_INCORPORATION_ERROR!>infer<!>(<!ALWAYS_NULL, TYPE_MISMATCH!>nothing<!>)
|
||||
val <!UNUSED_VARIABLE!>i<!> = <!TYPE_INFERENCE_INCORPORATION_ERROR!>infer<!>(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>nothing<!>)
|
||||
}
|
||||
|
||||
fun sum(<!UNUSED_PARAMETER!>a<!> : IntArray) : Int {
|
||||
|
||||
Vendored
+2
-2
@@ -1,8 +1,8 @@
|
||||
fun test() {
|
||||
val out : Int? = null
|
||||
val x : Nothing? = null
|
||||
if (out != <!ALWAYS_NULL!>x<!>)
|
||||
if (out != <!DEBUG_INFO_CONSTANT!>x<!>)
|
||||
<!DEBUG_INFO_SMARTCAST!>out<!>.plus(1)
|
||||
if (out == <!ALWAYS_NULL!>x<!>) return
|
||||
if (out == <!DEBUG_INFO_CONSTANT!>x<!>) return
|
||||
<!DEBUG_INFO_SMARTCAST!>out<!>.plus(1)
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ fun f3(s: Int?): Int {
|
||||
fun f4(s: Int?): Int {
|
||||
return when {
|
||||
s == 4 -> <!DEBUG_INFO_SMARTCAST!>s<!>
|
||||
s == null -> <!ALWAYS_NULL, TYPE_MISMATCH!>s<!>
|
||||
s == null -> <!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>s<!>
|
||||
else -> <!DEBUG_INFO_SMARTCAST!>s<!>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ fun main(args : Array<String>) {
|
||||
foo(x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
|
||||
foo(<!DEBUG_INFO_SMARTCAST!>x<!>)
|
||||
} else {
|
||||
foo(<!ALWAYS_NULL, TYPE_MISMATCH!>x<!>)
|
||||
foo(<!TYPE_MISMATCH, DEBUG_INFO_CONSTANT!>x<!>)
|
||||
<!UNREACHABLE_CODE!>foo(<!><!ALWAYS_NULL!>x<!>!!<!UNREACHABLE_CODE!>)<!>
|
||||
<!UNREACHABLE_CODE!>foo(<!DEBUG_INFO_SMARTCAST!>x<!>)<!>
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ fun <T> test(t: T): String? {
|
||||
if (t != null) {
|
||||
return t<!UNNECESSARY_SAFE_CALL!>?.<!>toString()
|
||||
}
|
||||
return <!ALWAYS_NULL!>t<!>?.toString()
|
||||
return <!DEBUG_INFO_CONSTANT!>t<!>?.toString()
|
||||
}
|
||||
|
||||
fun <T> T.testThis(): String? {
|
||||
|
||||
Vendored
+2
-2
@@ -33,10 +33,10 @@ fun test() {
|
||||
|
||||
if (platformN != null) {}
|
||||
if (platformN == null) {}
|
||||
if (a == null && platformN == <!ALWAYS_NULL!>a<!>) {}
|
||||
if (a == null && platformN == <!DEBUG_INFO_CONSTANT!>a<!>) {}
|
||||
|
||||
if (platformJ != null) {}
|
||||
if (platformJ == null) {}
|
||||
if (a == null && platformJ == <!ALWAYS_NULL!>a<!>) {}
|
||||
if (a == null && platformJ == <!DEBUG_INFO_CONSTANT!>a<!>) {}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -31,10 +31,10 @@ fun test() {
|
||||
|
||||
if (platformN !== null) {}
|
||||
if (platformN === null) {}
|
||||
if (a === null && platformN === <!ALWAYS_NULL!>a<!>) {}
|
||||
if (a === null && platformN === <!DEBUG_INFO_CONSTANT!>a<!>) {}
|
||||
|
||||
if (platformJ !== null) {}
|
||||
if (platformJ === null) {}
|
||||
if (a === null && platformJ === <!ALWAYS_NULL!>a<!>) {}
|
||||
if (a === null && platformJ === <!DEBUG_INFO_CONSTANT!>a<!>) {}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
fun foo(): String {
|
||||
var s: String?
|
||||
s = null
|
||||
<!ALWAYS_NULL!>s<!>?.length
|
||||
if (<!ALWAYS_NULL!>s<!> == null) s = "z"
|
||||
<!DEBUG_INFO_CONSTANT!>s<!>?.length
|
||||
<!ALWAYS_NULL!>s<!><!UNSAFE_CALL!>.<!>length
|
||||
if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>s<!> == null<!>) return <!ALWAYS_NULL!>s<!>!!
|
||||
var t: String? = "y"
|
||||
if (t == null) t = "x"
|
||||
var x: Int? = null
|
||||
if (x == null) <!TYPE_MISMATCH!>x += null<!>
|
||||
return <!DEBUG_INFO_SMARTCAST!>t<!> + s
|
||||
}
|
||||
|
||||
fun String?.gav() {}
|
||||
|
||||
fun bar(s: String?) {
|
||||
if (s != null) return
|
||||
// Ideally we should have DEBUG_INFO_CONSTANT instead
|
||||
<!ALWAYS_NULL!>s<!>.gav()
|
||||
<!DEBUG_INFO_CONSTANT!>s<!> as? String
|
||||
<!DEBUG_INFO_CONSTANT!>s<!> <!USELESS_CAST!>as String?<!>
|
||||
<!ALWAYS_NULL!>s<!> as String
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
package
|
||||
|
||||
public fun bar(/*0*/ s: kotlin.String?): kotlin.Unit
|
||||
public fun foo(): kotlin.String
|
||||
public fun kotlin.String?.gav(): kotlin.Unit
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
// FILE: My.java
|
||||
|
||||
public class My {
|
||||
static public My create() { return new My(); }
|
||||
public void foo() {}
|
||||
}
|
||||
|
||||
// FILE: Test.kt
|
||||
|
||||
fun test() {
|
||||
val my = My.create()
|
||||
if (my == null) {
|
||||
<!ALWAYS_NULL!>my<!>.foo()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package
|
||||
|
||||
public fun test(): kotlin.Unit
|
||||
|
||||
public open class My {
|
||||
public constructor My()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
// Static members
|
||||
public open fun create(): My!
|
||||
}
|
||||
@@ -8,7 +8,7 @@ fun foo(x : String?, y : String?) {
|
||||
x<!UNSAFE_CALL!>.<!>length
|
||||
y<!UNSAFE_CALL!>.<!>length
|
||||
}
|
||||
if (y != null || x == <!ALWAYS_NULL!>y<!>) {
|
||||
if (y != null || x == <!DEBUG_INFO_CONSTANT!>y<!>) {
|
||||
x<!UNSAFE_CALL!>.<!>length
|
||||
y<!UNSAFE_CALL!>.<!>length
|
||||
}
|
||||
@@ -17,7 +17,7 @@ fun foo(x : String?, y : String?) {
|
||||
<!DEBUG_INFO_SMARTCAST!>x<!>.length
|
||||
<!ALWAYS_NULL!>y<!><!UNSAFE_CALL!>.<!>length
|
||||
}
|
||||
if (y == null && x != <!ALWAYS_NULL!>y<!>) {
|
||||
if (y == null && x != <!DEBUG_INFO_CONSTANT!>y<!>) {
|
||||
// y == null but x != y
|
||||
<!DEBUG_INFO_SMARTCAST!>x<!>.length
|
||||
<!ALWAYS_NULL!>y<!><!UNSAFE_CALL!>.<!>length
|
||||
|
||||
@@ -3,7 +3,7 @@ fun foo(x: String?, y: String?, z: String?, w: String?) {
|
||||
<!DEBUG_INFO_SMARTCAST!>z<!>.length
|
||||
else
|
||||
z<!UNSAFE_CALL!>.<!>length
|
||||
if (x != null || y != null || (<!ALWAYS_NULL!>x<!> != z && <!ALWAYS_NULL!>y<!> != z))
|
||||
if (x != null || y != null || (<!DEBUG_INFO_CONSTANT!>x<!> != z && <!DEBUG_INFO_CONSTANT!>y<!> != z))
|
||||
z<!UNSAFE_CALL!>.<!>length
|
||||
else
|
||||
<!ALWAYS_NULL!>z<!><!UNSAFE_CALL!>.<!>length
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
fun bar(x: Int?): Int {
|
||||
if (x != null) return -1
|
||||
if (<!ALWAYS_NULL!>x<!> == null) return -2
|
||||
if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>x<!> == null<!>) return -2
|
||||
// Should be unreachable
|
||||
return 2 + 2
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
fun foo(): Int {
|
||||
var i: Int? = <!VARIABLE_WITH_REDUNDANT_INITIALIZER!>42<!>
|
||||
i = null
|
||||
return <!ALWAYS_NULL!>i<!> <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
return <!DEBUG_INFO_CONSTANT!>i<!> <!UNSAFE_INFIX_CALL!>+<!> 1
|
||||
}
|
||||
+1
-1
@@ -6,6 +6,6 @@ fun foo(e: E, something: Any?): Int {
|
||||
return when (e) {
|
||||
E.A -> 1
|
||||
E.B -> 2
|
||||
<!ALWAYS_NULL!>something<!> -> 3
|
||||
<!DEBUG_INFO_CONSTANT!>something<!> -> 3
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user