More accurate CFG for local class constructors (now they are not considered unconditionally executed) #KT-10042 Fixed

This commit is contained in:
Mikhail Glukhikh
2016-03-21 17:35:53 +03:00
parent 8756cba2f5
commit b975b7d26e
15 changed files with 155 additions and 36 deletions
@@ -0,0 +1,31 @@
== foo ==
fun foo() {
var x: String
class A {
init {
x = ""
}
}
x.length
}
---------------------
L0:
1 <START> INIT: in: {} out: {} USE: in: {length=READ} out: {length=READ}
2 mark({ var x: String class A { init { x = "" } } x.length })
v(var x: String) INIT: in: {} out: {x=D}
jmp?(L2) INIT: in: {x=D} out: {x=D} USE: in: {length=READ, x=READ} out: {length=READ, x=READ}
3 mark({ x = "" })
mark("")
r("") -> <v0> USE: in: {length=READ, x=WRITTEN_AFTER_READ} out: {length=READ, x=WRITTEN_AFTER_READ}
w(x|<v0>) INIT: in: {x=D} out: {x=ID} USE: in: {length=READ, x=READ} out: {length=READ, x=WRITTEN_AFTER_READ}
L2 [after local class]:
2 mark(x.length) INIT: in: {x=I?D} out: {x=I?D} USE: in: {length=READ, x=READ} out: {length=READ, x=READ}
r(x) -> <v2> USE: in: {length=READ} out: {length=READ, x=READ}
r(length|<v2>) -> <v3> USE: in: {} out: {length=READ}
L1:
1 <END> INIT: in: {} out: {}
error:
<ERROR>
sink:
<SINK> USE: in: {} out: {}
=====================