More precise value reassignment analysis. #KT-7418 Fixed. #KT-6902 Fixed.
Variable can now be "exactly initialized", "may be initialized" and "not initialized". A set of relevant tests. Some fixed tests.
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(k: Int): Int {
|
||||
val i: Int
|
||||
for (j in 1..k) {
|
||||
<!VAL_REASSIGNMENT!>i<!> = j
|
||||
}
|
||||
i = 6
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ k: kotlin.Int): kotlin.Int
|
||||
@@ -0,0 +1,10 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(): Int {
|
||||
val i: Int
|
||||
var j = 0
|
||||
do {
|
||||
<!VAL_REASSIGNMENT!>i<!> = ++j
|
||||
} while (j < 5)
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(): kotlin.Int
|
||||
@@ -0,0 +1,11 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(f: Boolean): Int {
|
||||
val i: Int
|
||||
if (f) {}
|
||||
else {
|
||||
i = 2
|
||||
}
|
||||
<!VAL_REASSIGNMENT!>i<!> = 3
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ f: kotlin.Boolean): kotlin.Int
|
||||
@@ -0,0 +1,9 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(k: Int): Int {
|
||||
val i: Int
|
||||
for (j in 1..k) {
|
||||
<!VAL_REASSIGNMENT!>i<!> = j
|
||||
}
|
||||
return <!UNINITIALIZED_VARIABLE!>i<!>
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ k: kotlin.Int): kotlin.Int
|
||||
@@ -0,0 +1,10 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(f: Boolean): Int {
|
||||
val i: Int
|
||||
if (f) {
|
||||
i = 1
|
||||
}
|
||||
<!VAL_REASSIGNMENT!>i<!> = 3
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ f: kotlin.Boolean): kotlin.Int
|
||||
@@ -0,0 +1,13 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(f: Boolean): Int {
|
||||
val i: Int
|
||||
if (f) {
|
||||
i = 1
|
||||
}
|
||||
else {
|
||||
i = 2
|
||||
}
|
||||
<!VAL_REASSIGNMENT!>i<!> = 3
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ f: kotlin.Boolean): kotlin.Int
|
||||
@@ -0,0 +1,6 @@
|
||||
fun foo(f: Boolean): Int {
|
||||
val i: Int
|
||||
if (f) {}
|
||||
i = 3
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ f: kotlin.Boolean): kotlin.Int
|
||||
@@ -0,0 +1,10 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(f: Boolean): Int {
|
||||
val i: Int
|
||||
when (f) {
|
||||
true -> i = 1
|
||||
}
|
||||
<!VAL_REASSIGNMENT!>i<!> = 3
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(/*0*/ f: kotlin.Boolean): kotlin.Int
|
||||
@@ -0,0 +1,11 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VALUE
|
||||
|
||||
fun foo(): Int {
|
||||
val i: Int
|
||||
var j = 0
|
||||
while (true) {
|
||||
<!VAL_REASSIGNMENT!>i<!> = ++j
|
||||
if (j > 5) break
|
||||
}
|
||||
return i
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
internal fun foo(): kotlin.Int
|
||||
Reference in New Issue
Block a user