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:
Mikhail Glukhikh
2015-09-01 19:16:27 +03:00
parent c59b118b09
commit 285d5d06c7
26 changed files with 269 additions and 53 deletions
@@ -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
+10
View File
@@ -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