Do not render trivial variables in DataFlow tests
The reason is that while there are optimizations for them definition of their state is both rather simple and may be confusing in testData
This commit is contained in:
+30
-30
@@ -38,66 +38,66 @@ fun foo(dir: Direction): Int {
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(dir: Direction) INIT: in: {} out: {dir=D}
|
||||
magic[FAKE_INITIALIZER](dir: Direction) -> <v0> INIT: in: {dir=D} out: {dir=D}
|
||||
w(dir|<v0>) INIT: in: {dir=D} out: {dir=ID} USE: in: {dir=READ} out: {dir=READ}
|
||||
2 mark({ val res: Int when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 } return res }) INIT: in: {dir=ID} out: {dir=ID}
|
||||
v(val res: Int) INIT: in: {dir=ID} out: {dir=ID, res=D}
|
||||
mark(when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }) INIT: in: {dir=ID, res=D} out: {dir=ID, res=D}
|
||||
v(dir: Direction) INIT: in: {} out: {}
|
||||
magic[FAKE_INITIALIZER](dir: Direction) -> <v0> INIT: in: {} out: {}
|
||||
w(dir|<v0>) INIT: in: {} out: {} USE: in: {} out: {}
|
||||
2 mark({ val res: Int when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 } return res }) INIT: in: {} out: {}
|
||||
v(val res: Int) INIT: in: {} out: {res=D}
|
||||
mark(when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }) INIT: in: {res=D} out: {res=D}
|
||||
r(dir) -> <v1>
|
||||
mark(Direction.NORTH -> res = 1)
|
||||
mark(Direction.NORTH)
|
||||
mark(Direction.NORTH)
|
||||
r(NORTH) -> <v2>
|
||||
magic[EQUALS_IN_WHEN_CONDITION](Direction.NORTH|<v1>, <v2>) -> <v3>
|
||||
jmp?(L4|<v3>) USE: in: {dir=READ, res=READ} out: {dir=READ, res=READ}
|
||||
jmp?(L4|<v3>) USE: in: {res=READ} out: {res=READ}
|
||||
L3 ['when' entry body]:
|
||||
r(1) -> <v4> USE: in: {dir=READ, res=WRITTEN_AFTER_READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
w(res|<v4>) INIT: in: {dir=ID, res=D} out: {dir=ID, res=ID} USE: in: {dir=READ, res=READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {dir=ID, res=ID} out: {dir=ID, res=ID}
|
||||
r(1) -> <v4> USE: in: {res=WRITTEN_AFTER_READ} out: {res=WRITTEN_AFTER_READ}
|
||||
w(res|<v4>) INIT: in: {res=D} out: {res=ID} USE: in: {res=READ} out: {res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {res=ID} out: {res=ID}
|
||||
L4 [next 'when' entry]:
|
||||
mark(Direction.SOUTH -> res = 2) INIT: in: {dir=ID, res=D} out: {dir=ID, res=D}
|
||||
mark(Direction.SOUTH -> res = 2) INIT: in: {res=D} out: {res=D}
|
||||
mark(Direction.SOUTH)
|
||||
mark(Direction.SOUTH)
|
||||
r(SOUTH) -> <v5>
|
||||
magic[EQUALS_IN_WHEN_CONDITION](Direction.SOUTH|<v1>, <v5>) -> <v6>
|
||||
jmp?(L6|<v6>) USE: in: {dir=READ, res=READ} out: {dir=READ, res=READ}
|
||||
jmp?(L6|<v6>) USE: in: {res=READ} out: {res=READ}
|
||||
L5 ['when' entry body]:
|
||||
r(2) -> <v7> USE: in: {dir=READ, res=WRITTEN_AFTER_READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
w(res|<v7>) INIT: in: {dir=ID, res=D} out: {dir=ID, res=ID} USE: in: {dir=READ, res=READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {dir=ID, res=ID} out: {dir=ID, res=ID}
|
||||
r(2) -> <v7> USE: in: {res=WRITTEN_AFTER_READ} out: {res=WRITTEN_AFTER_READ}
|
||||
w(res|<v7>) INIT: in: {res=D} out: {res=ID} USE: in: {res=READ} out: {res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {res=ID} out: {res=ID}
|
||||
L6 [next 'when' entry]:
|
||||
mark(Direction.WEST -> res = 3) INIT: in: {dir=ID, res=D} out: {dir=ID, res=D}
|
||||
mark(Direction.WEST -> res = 3) INIT: in: {res=D} out: {res=D}
|
||||
mark(Direction.WEST)
|
||||
mark(Direction.WEST)
|
||||
r(WEST) -> <v8>
|
||||
magic[EQUALS_IN_WHEN_CONDITION](Direction.WEST|<v1>, <v8>) -> <v9>
|
||||
jmp?(L8|<v9>) USE: in: {dir=READ, res=READ} out: {dir=READ, res=READ}
|
||||
jmp?(L8|<v9>) USE: in: {res=READ} out: {res=READ}
|
||||
L7 ['when' entry body]:
|
||||
r(3) -> <v10> USE: in: {dir=READ, res=WRITTEN_AFTER_READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
w(res|<v10>) INIT: in: {dir=ID, res=D} out: {dir=ID, res=ID} USE: in: {dir=READ, res=READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {dir=ID, res=ID} out: {dir=ID, res=ID}
|
||||
r(3) -> <v10> USE: in: {res=WRITTEN_AFTER_READ} out: {res=WRITTEN_AFTER_READ}
|
||||
w(res|<v10>) INIT: in: {res=D} out: {res=ID} USE: in: {res=READ} out: {res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {res=ID} out: {res=ID}
|
||||
L8 [next 'when' entry]:
|
||||
mark(Direction.EAST -> res = 4) INIT: in: {dir=ID, res=D} out: {dir=ID, res=D}
|
||||
mark(Direction.EAST -> res = 4) INIT: in: {res=D} out: {res=D}
|
||||
mark(Direction.EAST)
|
||||
mark(Direction.EAST)
|
||||
r(EAST) -> <v11>
|
||||
magic[EQUALS_IN_WHEN_CONDITION](Direction.EAST|<v1>, <v11>) -> <v12>
|
||||
jmp?(L10|<v12>) USE: in: {dir=READ, res=READ} out: {dir=READ, res=READ}
|
||||
jmp?(L10|<v12>) USE: in: {res=READ} out: {res=READ}
|
||||
L9 ['when' entry body]:
|
||||
r(4) -> <v13> USE: in: {dir=READ, res=WRITTEN_AFTER_READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
w(res|<v13>) INIT: in: {dir=ID, res=D} out: {dir=ID, res=ID} USE: in: {dir=READ, res=READ} out: {dir=READ, res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {dir=ID, res=ID} out: {dir=ID, res=ID}
|
||||
r(4) -> <v13> USE: in: {res=WRITTEN_AFTER_READ} out: {res=WRITTEN_AFTER_READ}
|
||||
w(res|<v13>) INIT: in: {res=D} out: {res=ID} USE: in: {res=READ} out: {res=WRITTEN_AFTER_READ}
|
||||
jmp(L2) INIT: in: {res=ID} out: {res=ID}
|
||||
L10 [next 'when' entry]:
|
||||
magic[EXHAUSTIVE_WHEN_ELSE](when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }) -> <v14> INIT: in: {dir=ID, res=D} out: {dir=ID, res=IED}
|
||||
magic[EXHAUSTIVE_WHEN_ELSE](when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }) -> <v14> INIT: in: {res=D} out: {res=IED}
|
||||
L2 [after 'when' expression]:
|
||||
merge(when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }|!<v15>, !<v16>, !<v17>, !<v18>) -> <v19> INIT: in: {dir=ID, res=ID} out: {dir=ID, res=ID} USE: in: {dir=READ, res=READ} out: {dir=READ, res=READ}
|
||||
r(res) -> <v20> USE: in: {dir=READ} out: {dir=READ, res=READ}
|
||||
merge(when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }|!<v15>, !<v16>, !<v17>, !<v18>) -> <v19> INIT: in: {res=ID} out: {res=ID} USE: in: {res=READ} out: {res=READ}
|
||||
r(res) -> <v20> USE: in: {} out: {res=READ}
|
||||
ret(*|<v20>) L1
|
||||
L1:
|
||||
1 <END> INIT: in: {dir=ID} out: {dir=ID}
|
||||
1 <END> INIT: in: {} out: {}
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {dir=READ} out: {dir=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
|
||||
@@ -42,15 +42,15 @@ fun use(vararg a: Any?) = a
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(vararg a: Any?) INIT: in: {} out: {a=D}
|
||||
magic[FAKE_INITIALIZER](vararg a: Any?) -> <v0> INIT: in: {a=D} out: {a=D}
|
||||
w(a|<v0>) INIT: in: {a=D} out: {a=ID}
|
||||
r(a) -> <v1> INIT: in: {a=ID} out: {a=ID}
|
||||
v(vararg a: Any?) INIT: in: {} out: {}
|
||||
magic[FAKE_INITIALIZER](vararg a: Any?) -> <v0> INIT: in: {} out: {}
|
||||
w(a|<v0>) INIT: in: {} out: {}
|
||||
r(a) -> <v1> INIT: in: {} out: {}
|
||||
ret(*|<v1>) L1
|
||||
L1:
|
||||
<END>
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {a=READ} out: {a=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
|
||||
+24
-24
@@ -10,22 +10,22 @@ fun foo() {
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
2 mark({ val a = 1 val f = { x: Int -> val y = x + a use(a) } })
|
||||
v(val a = 1) INIT: in: {} out: {a=D}
|
||||
r(1) -> <v0> INIT: in: {a=D} out: {a=D}
|
||||
w(a|<v0>) INIT: in: {a=D} out: {a=ID}
|
||||
v(val f = { x: Int -> val y = x + a use(a) }) INIT: in: {a=ID} out: {a=ID, f=D}
|
||||
mark({ x: Int -> val y = x + a use(a) }) INIT: in: {a=ID, f=D} out: {a=ID, f=D}
|
||||
v(val a = 1) INIT: in: {} out: {}
|
||||
r(1) -> <v0> INIT: in: {} out: {}
|
||||
w(a|<v0>) INIT: in: {} out: {}
|
||||
v(val f = { x: Int -> val y = x + a use(a) }) INIT: in: {} out: {}
|
||||
mark({ x: Int -> val y = x + a use(a) }) INIT: in: {} out: {}
|
||||
jmp?(L2)
|
||||
d({ x: Int -> val y = x + a use(a) }) INIT: in: {a=ID, f=D, x=ID, y=ID} out: {a=ID, f=D, x=ID, y=ID}
|
||||
d({ x: Int -> val y = x + a use(a) }) INIT: in: {} out: {}
|
||||
L2 [after local declaration]:
|
||||
r({ x: Int -> val y = x + a use(a) }) -> <v1>
|
||||
w(f|<v1>) INIT: in: {a=ID, f=D, x=ID, y=ID} out: {a=ID, f=ID, x=ID, y=ID}
|
||||
w(f|<v1>) INIT: in: {} out: {}
|
||||
L1:
|
||||
1 <END> INIT: in: {a=ID, f=ID, x=ID, y=ID} out: {a=ID, f=ID, x=ID, y=ID}
|
||||
1 <END> INIT: in: {} out: {}
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {a=READ, x=READ} out: {a=READ, x=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== anonymous_0 ==
|
||||
{ x: Int ->
|
||||
@@ -34,18 +34,18 @@ sink:
|
||||
}
|
||||
---------------------
|
||||
L3:
|
||||
3 <START> INIT: in: {a=ID, f=D} out: {a=ID, f=D}
|
||||
v(x: Int) INIT: in: {a=ID, f=D} out: {a=ID, f=D, x=D}
|
||||
magic[FAKE_INITIALIZER](x: Int) -> <v0> INIT: in: {a=ID, f=D, x=D} out: {a=ID, f=D, x=D}
|
||||
w(x|<v0>) INIT: in: {a=ID, f=D, x=D} out: {a=ID, f=D, x=ID}
|
||||
4 mark(val y = x + a use(a)) INIT: in: {a=ID, f=D, x=ID} out: {a=ID, f=D, x=ID}
|
||||
v(val y = x + a) INIT: in: {a=ID, f=D, x=ID} out: {a=ID, f=D, x=ID, y=D}
|
||||
r(x) -> <v1> INIT: in: {a=ID, f=D, x=ID, y=D} out: {a=ID, f=D, x=ID, y=D}
|
||||
3 <START> INIT: in: {} out: {}
|
||||
v(x: Int) INIT: in: {} out: {}
|
||||
magic[FAKE_INITIALIZER](x: Int) -> <v0> INIT: in: {} out: {}
|
||||
w(x|<v0>) INIT: in: {} out: {}
|
||||
4 mark(val y = x + a use(a)) INIT: in: {} out: {}
|
||||
v(val y = x + a) INIT: in: {} out: {}
|
||||
r(x) -> <v1> INIT: in: {} out: {}
|
||||
r(a) -> <v2>
|
||||
mark(x + a)
|
||||
call(x + a, plus|<v1>, <v2>) -> <v3>
|
||||
w(y|<v3>) INIT: in: {a=ID, f=D, x=ID, y=D} out: {a=ID, f=D, x=ID, y=ID}
|
||||
r(a) -> <v4> INIT: in: {a=ID, f=D, x=ID, y=ID} out: {a=ID, f=D, x=ID, y=ID}
|
||||
w(y|<v3>) INIT: in: {} out: {}
|
||||
r(a) -> <v4> INIT: in: {} out: {}
|
||||
mark(use(a))
|
||||
call(use(a), use|<v4>) -> <v5>
|
||||
3 ret(*|<v5>) L4
|
||||
@@ -54,22 +54,22 @@ L4:
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {a=READ, x=READ} out: {a=READ, x=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== use ==
|
||||
fun use(vararg a: Any?) = a
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(vararg a: Any?) INIT: in: {} out: {a=D}
|
||||
magic[FAKE_INITIALIZER](vararg a: Any?) -> <v0> INIT: in: {a=D} out: {a=D}
|
||||
w(a|<v0>) INIT: in: {a=D} out: {a=ID}
|
||||
r(a) -> <v1> INIT: in: {a=ID} out: {a=ID}
|
||||
v(vararg a: Any?) INIT: in: {} out: {}
|
||||
magic[FAKE_INITIALIZER](vararg a: Any?) -> <v0> INIT: in: {} out: {}
|
||||
w(a|<v0>) INIT: in: {} out: {}
|
||||
r(a) -> <v1> INIT: in: {} out: {}
|
||||
ret(*|<v1>) L1
|
||||
L1:
|
||||
<END>
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {a=READ} out: {a=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
|
||||
+5
-5
@@ -3,10 +3,10 @@ fun bar(f: () -> Unit) = f()
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(f: () -> Unit) INIT: in: {} out: {f=D}
|
||||
magic[FAKE_INITIALIZER](f: () -> Unit) -> <v0> INIT: in: {f=D} out: {f=D}
|
||||
w(f|<v0>) INIT: in: {f=D} out: {f=ID}
|
||||
r(f) -> <v1> INIT: in: {f=ID} out: {f=ID}
|
||||
v(f: () -> Unit) INIT: in: {} out: {}
|
||||
magic[FAKE_INITIALIZER](f: () -> Unit) -> <v0> INIT: in: {} out: {}
|
||||
w(f|<v0>) INIT: in: {} out: {}
|
||||
r(f) -> <v1> INIT: in: {} out: {}
|
||||
mark(f())
|
||||
call(f(), invoke|<v1>) -> <v2>
|
||||
ret(*|<v2>) L1
|
||||
@@ -15,7 +15,7 @@ L1:
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {f=READ} out: {f=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo() {
|
||||
|
||||
+18
-18
@@ -7,21 +7,21 @@ fun foo() {
|
||||
}
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {} USE: in: {} out: {}
|
||||
1 <START> INIT: in: {} out: {} USE: in: {} out: {}
|
||||
2 mark({ val a = 1 val b: Int b = 2 42 })
|
||||
v(val a = 1) INIT: in: {} out: {a=D}
|
||||
r(1) -> <v0> INIT: in: {a=D} out: {a=D}
|
||||
w(a|<v0>) INIT: in: {a=D} out: {a=ID}
|
||||
v(val b: Int) INIT: in: {a=ID} out: {a=ID, b=D}
|
||||
r(2) -> <v1> INIT: in: {a=ID, b=D} out: {a=ID, b=D} USE: in: {b=ONLY_WRITTEN_NEVER_READ} out: {b=ONLY_WRITTEN_NEVER_READ}
|
||||
w(b|<v1>) INIT: in: {a=ID, b=D} out: {a=ID, b=ID} USE: in: {} out: {b=ONLY_WRITTEN_NEVER_READ}
|
||||
r(42) -> <v2> INIT: in: {a=ID, b=ID} out: {a=ID, b=ID}
|
||||
v(val a = 1) INIT: in: {} out: {}
|
||||
r(1) -> <v0> INIT: in: {} out: {}
|
||||
w(a|<v0>) INIT: in: {} out: {}
|
||||
v(val b: Int) INIT: in: {} out: {b=D}
|
||||
r(2) -> <v1> INIT: in: {b=D} out: {b=D} USE: in: {b=ONLY_WRITTEN_NEVER_READ} out: {b=ONLY_WRITTEN_NEVER_READ}
|
||||
w(b|<v1>) INIT: in: {b=D} out: {b=ID} USE: in: {} out: {b=ONLY_WRITTEN_NEVER_READ}
|
||||
r(42) -> <v2> INIT: in: {b=ID} out: {b=ID}
|
||||
L1:
|
||||
1 <END> INIT: in: {a=ID} out: {a=ID}
|
||||
1 <END> INIT: in: {} out: {}
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {} out: {}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== bar ==
|
||||
fun bar(foo: Foo) {
|
||||
@@ -32,10 +32,10 @@ fun bar(foo: Foo) {
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(foo: Foo) INIT: in: {} out: {foo=D}
|
||||
magic[FAKE_INITIALIZER](foo: Foo) -> <v0> INIT: in: {foo=D} out: {foo=D}
|
||||
w(foo|<v0>) INIT: in: {foo=D} out: {foo=ID}
|
||||
2 mark({ foo.c foo.c = 2 42 }) INIT: in: {foo=ID} out: {foo=ID}
|
||||
v(foo: Foo) INIT: in: {} out: {}
|
||||
magic[FAKE_INITIALIZER](foo: Foo) -> <v0> INIT: in: {} out: {}
|
||||
w(foo|<v0>) INIT: in: {} out: {}
|
||||
2 mark({ foo.c foo.c = 2 42 }) INIT: in: {} out: {}
|
||||
mark(foo.c)
|
||||
r(foo) -> <v1>
|
||||
r(c|<v1>) -> <v2>
|
||||
@@ -48,7 +48,7 @@ L1:
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {foo=READ} out: {foo=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
== Foo ==
|
||||
interface Foo {
|
||||
@@ -57,11 +57,11 @@ interface Foo {
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(var c: Int) INIT: in: {} out: {c=D}
|
||||
v(var c: Int) INIT: in: {} out: {}
|
||||
L1:
|
||||
<END> INIT: in: {c=D} out: {c=D}
|
||||
<END> INIT: in: {} out: {}
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {} out: {}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
|
||||
@@ -51,15 +51,15 @@ fun use(a: Int) = a
|
||||
---------------------
|
||||
L0:
|
||||
1 <START> INIT: in: {} out: {}
|
||||
v(a: Int) INIT: in: {} out: {a=D}
|
||||
magic[FAKE_INITIALIZER](a: Int) -> <v0> INIT: in: {a=D} out: {a=D}
|
||||
w(a|<v0>) INIT: in: {a=D} out: {a=ID}
|
||||
r(a) -> <v1> INIT: in: {a=ID} out: {a=ID}
|
||||
v(a: Int) INIT: in: {} out: {}
|
||||
magic[FAKE_INITIALIZER](a: Int) -> <v0> INIT: in: {} out: {}
|
||||
w(a|<v0>) INIT: in: {} out: {}
|
||||
r(a) -> <v1> INIT: in: {} out: {}
|
||||
ret(*|<v1>) L1
|
||||
L1:
|
||||
<END>
|
||||
error:
|
||||
<ERROR>
|
||||
sink:
|
||||
<SINK> USE: in: {a=READ} out: {a=READ}
|
||||
<SINK> USE: in: {} out: {}
|
||||
=====================
|
||||
|
||||
Reference in New Issue
Block a user