diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/RedundantLocalsEliminationMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/RedundantLocalsEliminationMethodTransformer.kt index b54a93cbebd..aebb903818a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/RedundantLocalsEliminationMethodTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/RedundantLocalsEliminationMethodTransformer.kt @@ -113,6 +113,7 @@ class RedundantLocalsEliminationMethodTransformer(private val languageVersionSet val insns = findPopPredecessors(methodNode) { it.isUnitInstance() || it.opcode == Opcodes.ACONST_NULL || it.opcode == Opcodes.ALOAD } for ((pred, pop) in insns) { + methodNode.instructions.insertBefore(pred, InsnNode(Opcodes.NOP)) methodNode.instructions.removeAll(listOf(pred, pop)) } return insns.isNotEmpty() diff --git a/idea/testData/debugger/tinyApp/src/stepping/custom/coroutineUnitElimination.kt b/idea/testData/debugger/tinyApp/src/stepping/custom/coroutineUnitElimination.kt new file mode 100644 index 00000000000..3997f72fa27 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/custom/coroutineUnitElimination.kt @@ -0,0 +1,12 @@ +package coroutineUnitElimination + +suspend fun main() { + //Breakpoint! + Unit + //Breakpoint! + 42 + //Breakpoint! + Unit +} + +// RESUME: 3 \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/src/stepping/custom/coroutineUnitElimination.out b/idea/testData/debugger/tinyApp/src/stepping/custom/coroutineUnitElimination.out new file mode 100644 index 00000000000..a13b7b8644e --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/stepping/custom/coroutineUnitElimination.out @@ -0,0 +1,11 @@ +LineBreakpoint created at coroutineUnitElimination.kt:5 +LineBreakpoint created at coroutineUnitElimination.kt:7 +LineBreakpoint created at coroutineUnitElimination.kt:9 +Run Java +Connected to the target VM +coroutineUnitElimination.kt:5 +coroutineUnitElimination.kt:7 +coroutineUnitElimination.kt:9 +Disconnected from the target VM + +Process finished with exit code 0 diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java index c36845a0c9f..3bf2b5c9800 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/KotlinSteppingTestGenerated.java @@ -1047,6 +1047,11 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest { runTest("idea/testData/debugger/tinyApp/src/stepping/custom/coroutine.kt"); } + @TestMetadata("coroutineUnitElimination.kt") + public void testCoroutineUnitElimination() throws Exception { + runTest("idea/testData/debugger/tinyApp/src/stepping/custom/coroutineUnitElimination.kt"); + } + @TestMetadata("crossinlineLiteral.kt") public void testCrossinlineLiteral() throws Exception { runTest("idea/testData/debugger/tinyApp/src/stepping/custom/crossinlineLiteral.kt");