[FIR] Add checker for uninitialized properties

This commit is contained in:
Dmitriy Novozhilov
2020-06-17 11:51:15 +03:00
parent 25621d699b
commit 26458875d5
96 changed files with 1476 additions and 1358 deletions
@@ -9,13 +9,13 @@ fun doSmth(i: Int) {}
fun t1(b : Boolean) {
val v : Int
if (v == 0) {}
if (<!UNINITIALIZED_VARIABLE!>v<!> == 0) {}
var u: String
if (b) {
u = "s"
}
doSmth(u)
doSmth(<!UNINITIALIZED_VARIABLE!>u<!>)
var r: String
if (b) {
@@ -28,10 +28,10 @@ fun t1(b : Boolean) {
var t: String
if (b)
doSmth(t)
doSmth(<!UNINITIALIZED_VARIABLE!>t<!>)
else
t = "ss"
doSmth(t) //repeat for t
doSmth(<!UNINITIALIZED_VARIABLE!>t<!>) //repeat for t
val i = 3
doSmth(i)
@@ -207,7 +207,7 @@ class LocalValsVsProperties(val a: Int, w: Int) : Open(a, w) {
val r : Int
doSmth(x)
doSmth(y)
doSmth(r)
doSmth(<!UNINITIALIZED_VARIABLE!>r<!>)
doSmth(a)
}
var xx = w
@@ -257,7 +257,7 @@ class ClassObject() {
fun foo() {
val a : Int
doSmth(a)
doSmth(<!UNINITIALIZED_VARIABLE!>a<!>)
}
}
}
@@ -317,7 +317,7 @@ object TestObjectDeclaration {
if (1 < 3) {
i = 10
}
doSmth(i)
doSmth(<!UNINITIALIZED_VARIABLE!>i<!>)
}
}
@@ -12,7 +12,7 @@ val a: Int
return d
}
return b
return <!UNINITIALIZED_VARIABLE!>b<!>
}
class A {
@@ -21,7 +21,7 @@ class A {
val b: Int
val c: Int
42
return b
return <!UNINITIALIZED_VARIABLE!>b<!>
}
fun foo() {
@@ -31,7 +31,7 @@ class A {
val b: Int
val c: Int
42
return b
return <!UNINITIALIZED_VARIABLE!>b<!>
}
}
}
@@ -11,7 +11,7 @@ fun foo() {
x = 42
}
// Error!
x.hashCode()
<!UNINITIALIZED_VARIABLE!>x<!>.hashCode()
}
fun bar() {
@@ -8,7 +8,7 @@ fun foo() {
}
}
// Error! See KT-10042
x.length
<!UNINITIALIZED_VARIABLE!>x<!>.length
}
fun bar() {
@@ -19,7 +19,7 @@ fun bar() {
}
}
// Ok
x.length
<!UNINITIALIZED_VARIABLE!>x<!>.length
}
fun gav() {
@@ -31,7 +31,7 @@ fun gav() {
}
}
// Error! See KT-10042
x.length
<!UNINITIALIZED_VARIABLE!>x<!>.length
val y: String
class C(val s: String) {
constructor(): this("") {
@@ -39,7 +39,7 @@ fun gav() {
y = s
}
}
y.length
<!UNINITIALIZED_VARIABLE!>y<!>.length
}
open class Gau(val s: String)
@@ -53,7 +53,7 @@ fun gau() {
}
}
// Ok
x.length
<!UNINITIALIZED_VARIABLE!>x<!>.length
val y: String
fun local() {
object: Any() {
@@ -1,8 +0,0 @@
fun foo() {
var x: Int
fun bar() {
x = 42
}
x.hashCode()
bar()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo() {
var x: Int
fun bar() {
@@ -1,13 +0,0 @@
//KT-2369 Variable is not marked as uninitialized in 'finally' section
fun main() {
var x : Int
try {
throw Exception()
}
finally {
doSmth(x + 1)
}
}
fun doSmth(a: Any?) = a
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
//KT-2369 Variable is not marked as uninitialized in 'finally' section
fun main() {
@@ -12,7 +12,7 @@ private fun doTest() : Int {
return 0 ;
}
finally {
if(list != null) { // Must be an ERROR
if(<!UNINITIALIZED_VARIABLE!>list<!> != null) { // Must be an ERROR
}
}
}
@@ -15,7 +15,7 @@ val o = object {
p.x = 4
val z : Int
doSmth(z)
doSmth(<!UNINITIALIZED_VARIABLE!>z<!>)
}
}
@@ -28,7 +28,7 @@ class A {
val a : Int = 1
get() {
val x : Int
doSmth(x)
doSmth(<!UNINITIALIZED_VARIABLE!>x<!>)
return field
}
}
@@ -15,7 +15,7 @@ fun f1(flag: Boolean) {
// KT-13612: reassignment
n = 3
}
n.hashCode()
<!UNINITIALIZED_VARIABLE!>n<!>.hashCode()
}
fun f2(flag: Boolean) {
@@ -32,7 +32,7 @@ fun f2(flag: Boolean) {
// KT-13612: reassignment
n = 3
}
n.hashCode()
<!UNINITIALIZED_VARIABLE!>n<!>.hashCode()
}
}
@@ -50,6 +50,6 @@ fun f3(flag: Boolean) {
// KT-13612: reassignment
n = 3
}
n.hashCode()
<!UNINITIALIZED_VARIABLE!>n<!>.hashCode()
}
}
@@ -10,6 +10,6 @@ class C {
fun foo() {
val a : Int
a + 1
a + 1
<!UNINITIALIZED_VARIABLE!>a<!> + 1
<!UNINITIALIZED_VARIABLE!>a<!> + 1
}
@@ -23,14 +23,14 @@ fun test2() {
fun test3() {
val f = {
val a : Int
doSmth(a)
doSmth(<!UNINITIALIZED_VARIABLE!>a<!>)
}
}
fun test4() {
doSmth {
val a : Int
doSmth(a)
doSmth(<!UNINITIALIZED_VARIABLE!>a<!>)
}
}
@@ -1,6 +0,0 @@
fun bar(f: () -> Unit) = f()
fun foo() {
var v: Any
bar { v.hashCode() }
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun bar(f: () -> Unit) = f()
fun foo() {