Do not put $completion to LVT if is dead

This commit is contained in:
Ilmir Usmanov
2020-08-04 20:38:43 +02:00
parent 9925866293
commit bb5a99ec18
4 changed files with 1 additions and 5 deletions
@@ -1177,8 +1177,7 @@ private fun updateLvtAccordingToLiveness(method: MethodNode, isForNamedFunction:
for (variable in oldLvt) {
// $completion, $continuation and $result are dead, but they are used by debugger, as well as fake inliner variables
// For example, $continuation is used to create async stack trace
if (variable.name == SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME ||
variable.name == CONTINUATION_VARIABLE_NAME ||
if (variable.name == CONTINUATION_VARIABLE_NAME ||
variable.name == SUSPEND_CALL_RESULT_NAME ||
isFakeLocalVariableForInline(variable.name)
) {
@@ -12,6 +12,5 @@ class A {
// METHOD : A.foo1(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
// VARIABLE : NAME=this TYPE=LA; INDEX=0
// VARIABLE : NAME=l TYPE=J INDEX=1
// VARIABLE : NAME=$completion TYPE=Lkotlin/coroutines/Continuation; INDEX=3
// VARIABLE : NAME=$continuation TYPE=Lkotlin/coroutines/Continuation; INDEX=7
// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=6
@@ -9,6 +9,5 @@ suspend fun foo1(l: Long) {
// METHOD : StaticStateMachineKt.foo1(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
// VARIABLE : NAME=l TYPE=J INDEX=0
// VARIABLE : NAME=$completion TYPE=Lkotlin/coroutines/Continuation; INDEX=2
// VARIABLE : NAME=$continuation TYPE=Lkotlin/coroutines/Continuation; INDEX=6
// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=5
@@ -12,6 +12,5 @@ suspend fun A.foo1(l: Long) {
// METHOD : StaticStateMachineReceiverKt.foo1(LA;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
// VARIABLE : NAME=$this$foo1 TYPE=LA; INDEX=0
// VARIABLE : NAME=l TYPE=J INDEX=1
// VARIABLE : NAME=$completion TYPE=Lkotlin/coroutines/Continuation; INDEX=3
// VARIABLE : NAME=$continuation TYPE=Lkotlin/coroutines/Continuation; INDEX=7
// VARIABLE : NAME=$result TYPE=Ljava/lang/Object; INDEX=6