Pseudocode: Introduce pseudo-value analysis
This commit is contained in:
@@ -20,8 +20,8 @@ class C() {
|
||||
L0:
|
||||
1 <START>
|
||||
v(val a: Int = 1)
|
||||
r(1)
|
||||
w(a)
|
||||
r(1) -> <v0>
|
||||
w(a|<v0>)
|
||||
L1:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -35,15 +35,16 @@ fun doSmth(i: Int) {}
|
||||
L0:
|
||||
1 <START>
|
||||
v(i: Int)
|
||||
w(i)
|
||||
magic(i: Int) -> <v0>
|
||||
w(i|<v0>)
|
||||
2 mark({})
|
||||
read (Unit)
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
== test1 ==
|
||||
fun test1() {
|
||||
@@ -62,10 +63,10 @@ L0:
|
||||
mark(object { val x : Int { $x = 1 } })
|
||||
v(val x : Int)
|
||||
3 mark({ $x = 1 })
|
||||
r(1)
|
||||
w($x)
|
||||
2 r(object { val x : Int { $x = 1 } })
|
||||
w(a)
|
||||
r(1) -> <v0>
|
||||
w($x|<v0>)
|
||||
2 r(object { val x : Int { $x = 1 } }) -> <v1>
|
||||
w(a|<v1>)
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -85,8 +86,8 @@ L0:
|
||||
1 <START>
|
||||
v(val x : Int)
|
||||
2 mark({ $x = 1 })
|
||||
r(1)
|
||||
w($x)
|
||||
r(1) -> <v0>
|
||||
w($x|<v0>)
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -106,15 +107,15 @@ L0:
|
||||
1 <START>
|
||||
2 mark({ val b = 1 val a = object { val x = b } })
|
||||
v(val b = 1)
|
||||
r(1)
|
||||
w(b)
|
||||
r(1) -> <v0>
|
||||
w(b|<v0>)
|
||||
v(val a = object { val x = b })
|
||||
mark(object { val x = b })
|
||||
v(val x = b)
|
||||
r(b)
|
||||
w(x)
|
||||
r(object { val x = b })
|
||||
w(a)
|
||||
r(b) -> <v1>
|
||||
w(x|<v1>)
|
||||
r(object { val x = b }) -> <v2>
|
||||
w(a|<v2>)
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -138,11 +139,11 @@ L0:
|
||||
v(val a = object { val y : Int fun inner_bar() { y = 10 } })
|
||||
mark(object { val y : Int fun inner_bar() { y = 10 } })
|
||||
v(val y : Int)
|
||||
jmp?(L2) NEXT:[r(object { val y : Int fun inner_bar() { y = 10 } }), d(fun inner_bar() { y = 10 })]
|
||||
jmp?(L2) NEXT:[r(object { val y : Int fun inner_bar() { y = 10 } }) -> <v0>, d(fun inner_bar() { y = 10 })]
|
||||
d(fun inner_bar() { y = 10 }) NEXT:[<SINK>]
|
||||
L2:
|
||||
r(object { val y : Int fun inner_bar() { y = 10 } }) PREV:[jmp?(L2)]
|
||||
w(a)
|
||||
r(object { val y : Int fun inner_bar() { y = 10 } }) -> <v0> PREV:[jmp?(L2)]
|
||||
w(a|<v0>)
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -158,8 +159,8 @@ fun inner_bar() {
|
||||
L3:
|
||||
3 <START>
|
||||
4 mark({ y = 10 })
|
||||
r(10)
|
||||
w(y)
|
||||
r(10) -> <v0>
|
||||
w(y|<v0>)
|
||||
L4:
|
||||
3 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -189,13 +190,13 @@ L0:
|
||||
v(val x : Int)
|
||||
v(val y : Int)
|
||||
3 mark({ $x = 1 })
|
||||
r(1)
|
||||
w($x)
|
||||
2 jmp?(L2) NEXT:[r(object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } }), d(fun ggg() { y = 10 })]
|
||||
r(1) -> <v0>
|
||||
w($x|<v0>)
|
||||
2 jmp?(L2) NEXT:[r(object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } }) -> <v1>, d(fun ggg() { y = 10 })]
|
||||
d(fun ggg() { y = 10 }) NEXT:[<SINK>]
|
||||
L2:
|
||||
r(object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } }) PREV:[jmp?(L2)]
|
||||
w(a)
|
||||
r(object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } }) -> <v1> PREV:[jmp?(L2)]
|
||||
w(a|<v1>)
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -211,8 +212,8 @@ fun ggg() {
|
||||
L3:
|
||||
3 <START>
|
||||
4 mark({ y = 10 })
|
||||
r(10)
|
||||
w(y)
|
||||
r(10) -> <v0>
|
||||
w(y|<v0>)
|
||||
L4:
|
||||
3 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -242,19 +243,19 @@ L0:
|
||||
v(val a = object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } })
|
||||
mark(object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } })
|
||||
v(var x = 1)
|
||||
r(1)
|
||||
w(x)
|
||||
r(1) -> <v0>
|
||||
w(x|<v0>)
|
||||
3 mark({ $x = 2 })
|
||||
r(2)
|
||||
w($x)
|
||||
r(2) -> <v1>
|
||||
w($x|<v1>)
|
||||
2 jmp?(L2) NEXT:[jmp?(L5), d(fun foo() { x = 3 })]
|
||||
d(fun foo() { x = 3 }) NEXT:[<SINK>]
|
||||
L2:
|
||||
jmp?(L5) NEXT:[r(object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } }), d(fun bar() { x = 4 })] PREV:[jmp?(L2)]
|
||||
jmp?(L5) NEXT:[r(object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } }) -> <v2>, d(fun bar() { x = 4 })] PREV:[jmp?(L2)]
|
||||
d(fun bar() { x = 4 }) NEXT:[<SINK>]
|
||||
L5:
|
||||
r(object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } }) PREV:[jmp?(L5)]
|
||||
w(a)
|
||||
r(object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } }) -> <v2> PREV:[jmp?(L5)]
|
||||
w(a|<v2>)
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -270,8 +271,8 @@ fun foo() {
|
||||
L3:
|
||||
3 <START>
|
||||
4 mark({ x = 3 })
|
||||
r(3)
|
||||
w(x)
|
||||
r(3) -> <v0>
|
||||
w(x|<v0>)
|
||||
L4:
|
||||
3 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
@@ -287,8 +288,8 @@ fun bar() {
|
||||
L6:
|
||||
3 <START>
|
||||
4 mark({ x = 4 })
|
||||
r(4)
|
||||
w(x)
|
||||
r(4) -> <v0>
|
||||
w(x|<v0>)
|
||||
L7:
|
||||
3 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
|
||||
Reference in New Issue
Block a user