blob: 2bffc859dba5da16015493d6a48d44801c08919b [file] [log] [blame]
== f ==
fun f() {
var foo = 1
try {
foo = 2
throw RuntimeException()
} catch (e: Throwable) {
println(foo)
}
}
---------------------
L0:
1 <START> INIT: in: {} out: {} USE: in: {} out: {}
2 mark({ var foo = 1 try { foo = 2 throw RuntimeException() } catch (e: Throwable) { println(foo) } })
v(var foo = 1) INIT: in: {} out: {foo=D}
r(1) -> <v0> INIT: in: {foo=D} out: {foo=D}
w(foo|<v0>) INIT: in: {foo=D} out: {foo=ID}
mark(try { foo = 2 throw RuntimeException() } catch (e: Throwable) { println(foo) }) INIT: in: {foo=ID} out: {foo=ID}
jmp?(L2) USE: in: {foo=READ} out: {foo=READ}
3 mark({ foo = 2 throw RuntimeException() })
r(2) -> <v1> USE: in: {foo=WRITTEN_AFTER_READ} out: {foo=WRITTEN_AFTER_READ}
w(foo|<v1>) USE: in: {foo=READ} out: {foo=WRITTEN_AFTER_READ}
mark(throw RuntimeException())
jmp?(L2) USE: in: {foo=READ} out: {foo=READ}
mark(RuntimeException())
call(RuntimeException(), <init>) -> <v2>
throw (throw RuntimeException()|<v2>) USE: in: {} out: {}
- 2 jmp?(L2)
- jmp(L3)
L2 [onException]:
3 v(e: Throwable) INIT: in: {foo=ID} out: {foo=ID}
magic[FAKE_INITIALIZER](e: Throwable) -> <v4> INIT: in: {foo=ID} out: {foo=ID}
w(e|<v4>) INIT: in: {foo=ID} out: {foo=ID}
4 mark({ println(foo) }) INIT: in: {foo=ID} out: {foo=ID} USE: in: {foo=READ} out: {foo=READ}
r(foo) -> <v5> USE: in: {} out: {foo=READ}
mark(println(foo))
magic[UNRESOLVED_CALL](println(foo)|<v5>, !<v6>) -> <v7>
3 jmp(L3)
L3 [afterCatches]:
2 merge(try { foo = 2 throw RuntimeException() } catch (e: Throwable) { println(foo) }|!<v3>, <v7>) -> <v8>
L1:
1 <END> INIT: in: {} out: {}
error:
<ERROR>
sink:
<SINK> USE: in: {} out: {}
=====================