Debugger: Fix missing NOPs in optimized Unit.INSTANCE calls (KT-31702)
This commit is contained in:
+1
@@ -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()
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package coroutineUnitElimination
|
||||
|
||||
suspend fun main() {
|
||||
//Breakpoint!
|
||||
Unit
|
||||
//Breakpoint!
|
||||
42
|
||||
//Breakpoint!
|
||||
Unit
|
||||
}
|
||||
|
||||
// RESUME: 3
|
||||
+11
@@ -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
|
||||
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user