KT-609 Analyze not only local variables, but function parameters as well in 'unused values' analysis

This commit is contained in:
svtk
2011-11-29 19:04:15 +04:00
parent f5667874b0
commit ba49f508c9
89 changed files with 412 additions and 322 deletions
+20 -12
View File
@@ -31,8 +31,10 @@ fun f(a : Boolean) : Unit {
}
---------------------
l0:
<START> NEXT:[r(1)] PREV:[]
r(1) NEXT:[r(a)] PREV:[<START>]
<START> NEXT:[v(a : Boolean)] PREV:[]
v(a : Boolean) NEXT:[w(a)] PREV:[<START>]
w(a) NEXT:[r(1)] PREV:[v(a : Boolean)]
r(1) NEXT:[r(a)] PREV:[w(a)]
r(a) NEXT:[r(2)] PREV:[r(1)]
r(2) NEXT:[r(lng)] PREV:[r(a)]
r(lng) NEXT:[r(2.lng)] PREV:[r(2)]
@@ -92,14 +94,18 @@ sink:
fun foo(a : Boolean, b : Int) : Unit {}
---------------------
l0:
<START> NEXT:[read (Unit)] PREV:[]
read (Unit) NEXT:[<END>] PREV:[<START>]
<START> NEXT:[v(a : Boolean)] PREV:[]
v(a : Boolean) NEXT:[w(a)] PREV:[<START>]
w(a) NEXT:[v(b : Int)] PREV:[v(a : Boolean)]
v(b : Int) NEXT:[w(b)] PREV:[w(a)]
w(b) NEXT:[read (Unit)] PREV:[v(b : Int)]
read (Unit) NEXT:[<END>] PREV:[w(b)]
l1:
<END> NEXT:[<SINK>] PREV:[read (Unit)]
<END> NEXT:[<SINK>] PREV:[read (Unit)]
error:
<ERROR> NEXT:[] PREV:[]
<ERROR> NEXT:[] PREV:[]
sink:
<SINK> NEXT:[] PREV:[<END>]
<SINK> NEXT:[] PREV:[<END>]
=====================
== genfun ==
fun genfun<T>() : Unit {}
@@ -118,12 +124,14 @@ sink:
fun flfun(f : fun () : Any) : Unit {}
---------------------
l0:
<START> NEXT:[read (Unit)] PREV:[]
read (Unit) NEXT:[<END>] PREV:[<START>]
<START> NEXT:[v(f : fun () : Any)] PREV:[]
v(f : fun () : Any) NEXT:[w(f)] PREV:[<START>]
w(f) NEXT:[read (Unit)] PREV:[v(f : fun () : Any)]
read (Unit) NEXT:[<END>] PREV:[w(f)]
l1:
<END> NEXT:[<SINK>] PREV:[read (Unit)]
<END> NEXT:[<SINK>] PREV:[read (Unit)]
error:
<ERROR> NEXT:[] PREV:[]
<ERROR> NEXT:[] PREV:[]
sink:
<SINK> NEXT:[] PREV:[<END>]
<SINK> NEXT:[] PREV:[<END>]
=====================
+16 -8
View File
@@ -388,8 +388,10 @@ fun t8(a : Int) {
}
---------------------
l0:
<START> NEXT:[r(1)] PREV:[]
r(1) NEXT:[r(a)] PREV:[<START>]
<START> NEXT:[v(a : Int)] PREV:[]
v(a : Int) NEXT:[w(a)] PREV:[<START>]
w(a) NEXT:[r(1)] PREV:[v(a : Int)]
r(1) NEXT:[r(a)] PREV:[w(a)]
r(a) NEXT:[r(..)] PREV:[r(1)]
r(..) NEXT:[r(1..a)] PREV:[r(a)]
r(1..a) NEXT:[v(i)] PREV:[r(..)]
@@ -439,8 +441,10 @@ fun t9(a : Int) {
}
---------------------
l0:
<START> NEXT:[r(1)] PREV:[]
r(1) NEXT:[r(a)] PREV:[<START>]
<START> NEXT:[v(a : Int)] PREV:[]
v(a : Int) NEXT:[w(a)] PREV:[<START>]
w(a) NEXT:[r(1)] PREV:[v(a : Int)]
r(1) NEXT:[r(a)] PREV:[w(a)]
r(a) NEXT:[r(..)] PREV:[r(1)]
r(..) NEXT:[r(1..a)] PREV:[r(a)]
r(1..a) NEXT:[v(i)] PREV:[r(..)]
@@ -489,8 +493,10 @@ fun t10(a : Int) {
}
---------------------
l0:
<START> NEXT:[r(1)] PREV:[]
r(1) NEXT:[r(a)] PREV:[<START>]
<START> NEXT:[v(a : Int)] PREV:[]
v(a : Int) NEXT:[w(a)] PREV:[<START>]
w(a) NEXT:[r(1)] PREV:[v(a : Int)]
r(1) NEXT:[r(a)] PREV:[w(a)]
r(a) NEXT:[r(..)] PREV:[r(1)]
r(..) NEXT:[r(1..a)] PREV:[r(a)]
r(1..a) NEXT:[v(i)] PREV:[r(..)]
@@ -747,8 +753,10 @@ fun doSmth(i: Int) {
}
---------------------
l0:
<START> NEXT:[read (Unit)] PREV:[]
read (Unit) NEXT:[<END>] PREV:[<START>]
<START> NEXT:[v(i: Int)] PREV:[]
v(i: Int) NEXT:[w(i)] PREV:[<START>]
w(i) NEXT:[read (Unit)] PREV:[v(i: Int)]
read (Unit) NEXT:[<END>] PREV:[w(i)]
l1:
<END> NEXT:[<SINK>] PREV:[read (Unit)]
error:
+4 -2
View File
@@ -34,8 +34,10 @@ sink:
fun doSmth(i: Int) {}
---------------------
l0:
<START> NEXT:[read (Unit)] PREV:[]
read (Unit) NEXT:[<END>] PREV:[<START>]
<START> NEXT:[v(i: Int)] PREV:[]
v(i: Int) NEXT:[w(i)] PREV:[<START>]
w(i) NEXT:[read (Unit)] PREV:[v(i: Int)]
read (Unit) NEXT:[<END>] PREV:[w(i)]
l1:
<END> NEXT:[<SINK>] PREV:[read (Unit)]
error:
+34 -28
View File
@@ -17,8 +17,10 @@ fun t1(b: Boolean) {
}
---------------------
l0:
<START> NEXT:[v(var u: String)] PREV:[]
v(var u: String) NEXT:[r(b)] PREV:[<START>]
<START> NEXT:[v(b: Boolean)] PREV:[]
v(b: Boolean) NEXT:[w(b)] PREV:[<START>]
w(b) NEXT:[v(var u: String)] PREV:[v(b: Boolean)]
v(var u: String) NEXT:[r(b)] PREV:[w(b)]
r(b) NEXT:[jf(l2)] PREV:[v(var u: String)]
jf(l2) NEXT:[read (Unit), r("s")] PREV:[r(b)]
r("s") NEXT:[w(u)] PREV:[jf(l2)]
@@ -63,45 +65,49 @@ fun t2(b: Boolean) {
}
---------------------
l0:
<START> NEXT:[v(val i = 3)] PREV:[]
v(val i = 3) NEXT:[r(3)] PREV:[<START>]
r(3) NEXT:[w(i)] PREV:[v(val i = 3)]
w(i) NEXT:[r(b)] PREV:[r(3)]
r(b) NEXT:[jf(l2)] PREV:[w(i)]
jf(l2) NEXT:[read (Unit), ret l1] PREV:[r(b)]
ret l1 NEXT:[<END>] PREV:[jf(l2)]
* jmp(l3) NEXT:[r(i)] PREV:[]
<START> NEXT:[v(b: Boolean)] PREV:[]
v(b: Boolean) NEXT:[w(b)] PREV:[<START>]
w(b) NEXT:[v(val i = 3)] PREV:[v(b: Boolean)]
v(val i = 3) NEXT:[r(3)] PREV:[w(b)]
r(3) NEXT:[w(i)] PREV:[v(val i = 3)]
w(i) NEXT:[r(b)] PREV:[r(3)]
r(b) NEXT:[jf(l2)] PREV:[w(i)]
jf(l2) NEXT:[read (Unit), ret l1] PREV:[r(b)]
ret l1 NEXT:[<END>] PREV:[jf(l2)]
* jmp(l3) NEXT:[r(i)] PREV:[]
l2:
read (Unit) NEXT:[r(i)] PREV:[jf(l2)]
read (Unit) NEXT:[r(i)] PREV:[jf(l2)]
l3:
r(i) NEXT:[r(doSmth)] PREV:[read (Unit)]
r(doSmth) NEXT:[r(doSmth(i))] PREV:[r(i)]
r(doSmth(i)) NEXT:[r(i)] PREV:[r(doSmth)]
r(i) NEXT:[r(i is Int)] PREV:[r(doSmth(i))]
r(i is Int) NEXT:[jf(l4)] PREV:[r(i)]
jf(l4) NEXT:[read (Unit), ret l1] PREV:[r(i is Int)]
ret l1 NEXT:[<END>] PREV:[jf(l4)]
* jmp(l5) NEXT:[<END>] PREV:[]
r(i) NEXT:[r(doSmth)] PREV:[read (Unit)]
r(doSmth) NEXT:[r(doSmth(i))] PREV:[r(i)]
r(doSmth(i)) NEXT:[r(i)] PREV:[r(doSmth)]
r(i) NEXT:[r(i is Int)] PREV:[r(doSmth(i))]
r(i is Int) NEXT:[jf(l4)] PREV:[r(i)]
jf(l4) NEXT:[read (Unit), ret l1] PREV:[r(i is Int)]
ret l1 NEXT:[<END>] PREV:[jf(l4)]
* jmp(l5) NEXT:[<END>] PREV:[]
l4:
read (Unit) NEXT:[<END>] PREV:[jf(l4)]
read (Unit) NEXT:[<END>] PREV:[jf(l4)]
l1:
l5:
<END> NEXT:[<SINK>] PREV:[ret l1, ret l1, read (Unit)]
<END> NEXT:[<SINK>] PREV:[ret l1, ret l1, read (Unit)]
error:
<ERROR> NEXT:[] PREV:[]
<ERROR> NEXT:[] PREV:[]
sink:
<SINK> NEXT:[] PREV:[<END>]
<SINK> NEXT:[] PREV:[<END>]
=====================
== doSmth ==
fun doSmth(s: String) {}
---------------------
l0:
<START> NEXT:[read (Unit)] PREV:[]
read (Unit) NEXT:[<END>] PREV:[<START>]
<START> NEXT:[v(s: String)] PREV:[]
v(s: String) NEXT:[w(s)] PREV:[<START>]
w(s) NEXT:[read (Unit)] PREV:[v(s: String)]
read (Unit) NEXT:[<END>] PREV:[w(s)]
l1:
<END> NEXT:[<SINK>] PREV:[read (Unit)]
<END> NEXT:[<SINK>] PREV:[read (Unit)]
error:
<ERROR> NEXT:[] PREV:[]
<ERROR> NEXT:[] PREV:[]
sink:
<SINK> NEXT:[] PREV:[<END>]
<SINK> NEXT:[] PREV:[<END>]
=====================
+42 -38
View File
@@ -18,57 +18,61 @@ fun lazyBooleans(a : Boolean, b : Boolean) : Unit {
}
---------------------
l0:
<START> NEXT:[r(a)] PREV:[]
r(a) NEXT:[jf(l2)] PREV:[<START>]
jf(l2) NEXT:[r(2), r(1)] PREV:[r(a)]
r(1) NEXT:[jmp(l3)] PREV:[jf(l2)]
jmp(l3) NEXT:[r(3)] PREV:[r(1)]
<START> NEXT:[v(a : Boolean)] PREV:[]
v(a : Boolean) NEXT:[w(a)] PREV:[<START>]
w(a) NEXT:[v(b : Boolean)] PREV:[v(a : Boolean)]
v(b : Boolean) NEXT:[w(b)] PREV:[w(a)]
w(b) NEXT:[r(a)] PREV:[v(b : Boolean)]
r(a) NEXT:[jf(l2)] PREV:[w(b)]
jf(l2) NEXT:[r(2), r(1)] PREV:[r(a)]
r(1) NEXT:[jmp(l3)] PREV:[jf(l2)]
jmp(l3) NEXT:[r(3)] PREV:[r(1)]
l2:
r(2) NEXT:[r(3)] PREV:[jf(l2)]
r(2) NEXT:[r(3)] PREV:[jf(l2)]
l3:
r(3) NEXT:[r(a)] PREV:[jmp(l3), r(2)]
r(a) NEXT:[jf(l4)] PREV:[r(3)]
jf(l4) NEXT:[jf(l5), r(b)] PREV:[r(a)]
r(b) NEXT:[jf(l5)] PREV:[jf(l4)]
r(3) NEXT:[r(a)] PREV:[jmp(l3), r(2)]
r(a) NEXT:[jf(l4)] PREV:[r(3)]
jf(l4) NEXT:[jf(l5), r(b)] PREV:[r(a)]
r(b) NEXT:[jf(l5)] PREV:[jf(l4)]
l4:
jf(l5) NEXT:[r(6), r(5)] PREV:[jf(l4), r(b)]
r(5) NEXT:[jmp(l6)] PREV:[jf(l5)]
jmp(l6) NEXT:[r(7)] PREV:[r(5)]
jf(l5) NEXT:[r(6), r(5)] PREV:[jf(l4), r(b)]
r(5) NEXT:[jmp(l6)] PREV:[jf(l5)]
jmp(l6) NEXT:[r(7)] PREV:[r(5)]
l5:
r(6) NEXT:[r(7)] PREV:[jf(l5)]
r(6) NEXT:[r(7)] PREV:[jf(l5)]
l6:
r(7) NEXT:[r(a)] PREV:[jmp(l6), r(6)]
r(a) NEXT:[jt(l7)] PREV:[r(7)]
jt(l7) NEXT:[r(b), jf(l8)] PREV:[r(a)]
r(b) NEXT:[jf(l8)] PREV:[jt(l7)]
r(7) NEXT:[r(a)] PREV:[jmp(l6), r(6)]
r(a) NEXT:[jt(l7)] PREV:[r(7)]
jt(l7) NEXT:[r(b), jf(l8)] PREV:[r(a)]
r(b) NEXT:[jf(l8)] PREV:[jt(l7)]
l7:
jf(l8) NEXT:[r(9), r(8)] PREV:[jt(l7), r(b)]
r(8) NEXT:[jmp(l9)] PREV:[jf(l8)]
jmp(l9) NEXT:[r(10)] PREV:[r(8)]
jf(l8) NEXT:[r(9), r(8)] PREV:[jt(l7), r(b)]
r(8) NEXT:[jmp(l9)] PREV:[jf(l8)]
jmp(l9) NEXT:[r(10)] PREV:[r(8)]
l8:
r(9) NEXT:[r(10)] PREV:[jf(l8)]
r(9) NEXT:[r(10)] PREV:[jf(l8)]
l9:
r(10) NEXT:[r(a)] PREV:[jmp(l9), r(9)]
r(a) NEXT:[jf(l10)] PREV:[r(10)]
jf(l10) NEXT:[read (Unit), r(11)] PREV:[r(a)]
r(11) NEXT:[jmp(l11)] PREV:[jf(l10)]
jmp(l11) NEXT:[r(12)] PREV:[r(11)]
r(10) NEXT:[r(a)] PREV:[jmp(l9), r(9)]
r(a) NEXT:[jf(l10)] PREV:[r(10)]
jf(l10) NEXT:[read (Unit), r(11)] PREV:[r(a)]
r(11) NEXT:[jmp(l11)] PREV:[jf(l10)]
jmp(l11) NEXT:[r(12)] PREV:[r(11)]
l10:
read (Unit) NEXT:[r(12)] PREV:[jf(l10)]
read (Unit) NEXT:[r(12)] PREV:[jf(l10)]
l11:
r(12) NEXT:[r(a)] PREV:[jmp(l11), read (Unit)]
r(a) NEXT:[jf(l12)] PREV:[r(12)]
jf(l12) NEXT:[r(13), read (Unit)] PREV:[r(a)]
read (Unit) NEXT:[jmp(l13)] PREV:[jf(l12)]
jmp(l13) NEXT:[r(14)] PREV:[read (Unit)]
r(12) NEXT:[r(a)] PREV:[jmp(l11), read (Unit)]
r(a) NEXT:[jf(l12)] PREV:[r(12)]
jf(l12) NEXT:[r(13), read (Unit)] PREV:[r(a)]
read (Unit) NEXT:[jmp(l13)] PREV:[jf(l12)]
jmp(l13) NEXT:[r(14)] PREV:[read (Unit)]
l12:
r(13) NEXT:[r(14)] PREV:[jf(l12)]
r(13) NEXT:[r(14)] PREV:[jf(l12)]
l13:
r(14) NEXT:[<END>] PREV:[jmp(l13), r(13)]
r(14) NEXT:[<END>] PREV:[jmp(l13), r(13)]
l1:
<END> NEXT:[<SINK>] PREV:[r(14)]
<END> NEXT:[<SINK>] PREV:[r(14)]
error:
<ERROR> NEXT:[] PREV:[]
<ERROR> NEXT:[] PREV:[]
sink:
<SINK> NEXT:[] PREV:[<END>]
<SINK> NEXT:[] PREV:[<END>]
=====================
@@ -80,8 +80,10 @@ sink:
fun doSmth(i: Int) {}
---------------------
l0:
<START> NEXT:[read (Unit)] PREV:[]
read (Unit) NEXT:[<END>] PREV:[<START>]
<START> NEXT:[v(i: Int)] PREV:[]
v(i: Int) NEXT:[w(i)] PREV:[<START>]
w(i) NEXT:[read (Unit)] PREV:[v(i: Int)]
read (Unit) NEXT:[<END>] PREV:[w(i)]
l1:
<END> NEXT:[<SINK>] PREV:[read (Unit)]
error: