Pseudocode: Bind nondeterministic jump caused by local declaration to declaration iself instead of its parent element
#KT-6261 Fixed #KT-6416 Fixed
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
== test ==
|
||||
fun test(): Int {
|
||||
val j = 1
|
||||
fun local() = 1
|
||||
return local()
|
||||
}
|
||||
---------------------
|
||||
L0:
|
||||
1 <START>
|
||||
2 mark({ val j = 1 fun local() = 1 return local() })
|
||||
v(val j = 1)
|
||||
r(1) -> <v0>
|
||||
w(j|<v0>)
|
||||
jmp?(L2) NEXT:[mark(local()), d(fun local() = 1)]
|
||||
d(fun local() = 1) NEXT:[<SINK>]
|
||||
L2 [after local declaration]:
|
||||
mark(local()) PREV:[jmp?(L2)]
|
||||
call(local(), local) -> <v1>
|
||||
ret(*|<v1>) L1
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>, d(fun local() = 1)]
|
||||
=====================
|
||||
== local ==
|
||||
fun local() = 1
|
||||
---------------------
|
||||
L3:
|
||||
3 <START>
|
||||
r(1) -> <v0>
|
||||
ret(*|<v0>) L4
|
||||
L4:
|
||||
<END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
<SINK> PREV:[<ERROR>, <END>]
|
||||
=====================
|
||||
@@ -0,0 +1,5 @@
|
||||
fun test(): Int {
|
||||
val j = 1
|
||||
fun local() = 1
|
||||
return local()
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
== test ==
|
||||
fun test(): Int {
|
||||
val j = 1
|
||||
fun local() = 1
|
||||
return local()
|
||||
}
|
||||
---------------------
|
||||
1 <v0>: Int NEW: r(1) -> <v0>
|
||||
local() <v1>: Int NEW: call(local(), local) -> <v1>
|
||||
return local() !<v2>: *
|
||||
{ val j = 1 fun local() = 1 return local() } !<v2>: * COPY
|
||||
=====================
|
||||
== local ==
|
||||
fun local() = 1
|
||||
---------------------
|
||||
1 <v0>: Int NEW: r(1) -> <v0>
|
||||
=====================
|
||||
Reference in New Issue
Block a user