diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt index 193937676f9..ea67fe8a429 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt @@ -19,11 +19,7 @@ package org.jetbrains.kotlin.codegen.optimization import org.jetbrains.kotlin.codegen.optimization.common.isMeaningful import org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer import org.jetbrains.org.objectweb.asm.Opcodes -import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode -import org.jetbrains.org.objectweb.asm.tree.JumpInsnNode -import org.jetbrains.org.objectweb.asm.tree.LabelNode -import org.jetbrains.org.objectweb.asm.tree.LineNumberNode -import org.jetbrains.org.objectweb.asm.tree.MethodNode +import org.jetbrains.org.objectweb.asm.tree.* class RedundantGotoMethodTransformer : MethodTransformer() { /** @@ -80,6 +76,7 @@ class RedundantGotoMethodTransformer : MethodTransformer() { } for (insnToRemove in insnsToRemove) { + methodNode.instructions.insertBefore(insnToRemove, InsnNode(Opcodes.NOP)) methodNode.instructions.remove(insnToRemove) } } diff --git a/compiler/testData/codegen/bytecodeText/inline/inlineSuspendReifiedNoSpilling.kt b/compiler/testData/codegen/bytecodeText/inline/inlineSuspendReifiedNoSpilling.kt index 105935d6dac..10c85993a8b 100644 --- a/compiler/testData/codegen/bytecodeText/inline/inlineSuspendReifiedNoSpilling.kt +++ b/compiler/testData/codegen/bytecodeText/inline/inlineSuspendReifiedNoSpilling.kt @@ -30,4 +30,4 @@ suspend fun ApplicationCall.test(authenticationService: AuthenticationService) { // 0 ILOAD 3 // 0 ILOAD 2 // 1 \$i\$f\$receiveJSON I .* 2 -// 2 \$i\$f\$respond I .* 3 +// 3 \$i\$f\$respond I .* 3 diff --git a/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt b/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt index fa5cd441b6f..43d605999dd 100644 --- a/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt +++ b/compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt @@ -10,4 +10,4 @@ inline fun lookAtMe(f: (String) -> Unit) { f(a) // Should be no unneeded nops on this line, that might be generated for zero-parameters lambda } -// 0 NOP \ No newline at end of file +// 2 NOP diff --git a/compiler/testData/debug/stepping/linenumberForOneParametersArgumentCall.kt b/compiler/testData/debug/stepping/linenumberForOneParametersArgumentCall.kt new file mode 100644 index 00000000000..836e85d41d6 --- /dev/null +++ b/compiler/testData/debug/stepping/linenumberForOneParametersArgumentCall.kt @@ -0,0 +1,21 @@ +// FILE: test.kt + +fun box() { + lookAtMe { + val c = "c" + } +} + +inline fun lookAtMe(f: (String) -> Unit) { + val a = "a" + f(a) +} + +// LINENUMBERS +// test.kt:4 box +// test.kt:10 box +// test.kt:11 box +// test.kt:5 box +// test.kt:6 box +// test.kt:12 box +// test.kt:7 box \ No newline at end of file diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java index a40f880d19b..1c15d6bcb3f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/IrSteppingTestGenerated.java @@ -290,6 +290,12 @@ public class IrSteppingTestGenerated extends AbstractIrSteppingTest { runTest("compiler/testData/debug/stepping/lineNumberAfterInline.kt"); } + @Test + @TestMetadata("linenumberForOneParametersArgumentCall.kt") + public void testLinenumberForOneParametersArgumentCall() throws Exception { + runTest("compiler/testData/debug/stepping/linenumberForOneParametersArgumentCall.kt"); + } + @Test @TestMetadata("localFunction.kt") public void testLocalFunction() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java index c5aaf902d15..d37cbfdcc80 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/debugInformation/SteppingTestGenerated.java @@ -290,6 +290,12 @@ public class SteppingTestGenerated extends AbstractSteppingTest { runTest("compiler/testData/debug/stepping/lineNumberAfterInline.kt"); } + @Test + @TestMetadata("linenumberForOneParametersArgumentCall.kt") + public void testLinenumberForOneParametersArgumentCall() throws Exception { + runTest("compiler/testData/debug/stepping/linenumberForOneParametersArgumentCall.kt"); + } + @Test @TestMetadata("localFunction.kt") public void testLocalFunction() throws Exception {