From 37050e061674496983f484ecfdd633837a226145 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 30 Jul 2021 09:30:17 +0300 Subject: [PATCH] JVM_IR KT-34594 don't generate fake local variable for @InlineOnly --- .../codegen/FirBytecodeTextTestGenerated.java | 6 ++++++ .../lower/FakeInliningLocalVariablesLowering.kt | 3 ++- .../inline/noFakeVariableForInlineOnlyFun.kt | 17 +++++++++++++++++ .../codegen/BytecodeTextTestGenerated.java | 6 ++++++ .../codegen/IrBytecodeTextTestGenerated.java | 6 ++++++ 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/bytecodeText/inline/noFakeVariableForInlineOnlyFun.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java index 4a38c2e4e3e..287e5aabea1 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java @@ -3282,6 +3282,12 @@ public class FirBytecodeTextTestGenerated extends AbstractFirBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt"); } + @Test + @TestMetadata("noFakeVariableForInlineOnlyFun.kt") + public void testNoFakeVariableForInlineOnlyFun() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inline/noFakeVariableForInlineOnlyFun.kt"); + } + @Test @TestMetadata("noSynAccessor.kt") public void testNoSynAccessor() throws Exception { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FakeInliningLocalVariablesLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FakeInliningLocalVariablesLowering.kt index 95a60e2d392..6789f4937ec 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FakeInliningLocalVariablesLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FakeInliningLocalVariablesLowering.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.backend.jvm.JvmBackendContext +import org.jetbrains.kotlin.backend.jvm.codegen.isInlineOnly import org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator import org.jetbrains.kotlin.codegen.inline.coroutines.FOR_INLINE_SUFFIX import org.jetbrains.kotlin.ir.builders.createTmpVariable @@ -35,7 +36,7 @@ internal class FakeInliningLocalVariablesLowering(val context: JvmBackendContext override fun visitFunction(declaration: IrFunction, data: IrDeclaration?) { super.visitFunction(declaration, data) - if (declaration.isInline && !declaration.origin.isSynthetic && declaration.body != null) { + if (declaration.isInline && !declaration.origin.isSynthetic && declaration.body != null && !declaration.isInlineOnly()) { declaration.addFakeInliningLocalVariables() } } diff --git a/compiler/testData/codegen/bytecodeText/inline/noFakeVariableForInlineOnlyFun.kt b/compiler/testData/codegen/bytecodeText/inline/noFakeVariableForInlineOnlyFun.kt new file mode 100644 index 00000000000..919c01e3933 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/inline/noFakeVariableForInlineOnlyFun.kt @@ -0,0 +1,17 @@ +@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") +@kotlin.internal.InlineOnly +inline fun inlineOnlyFun() = 42 + +fun test() = inlineOnlyFun() + +// JVM_TEMPLATES +// 1 LDC 0 +// 1 ICONST_0 +// 0 ISTORE 1 +// 2 ISTORE 0 + +// JVM_IR_TEMPLATES +// 0 LDC 0 +// 0 ICONST_0 +// 0 ISTORE 1 +// 0 ISTORE 0 \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java index 43b96c900b6..4ca8f2f9b65 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java @@ -3144,6 +3144,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt"); } + @Test + @TestMetadata("noFakeVariableForInlineOnlyFun.kt") + public void testNoFakeVariableForInlineOnlyFun() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inline/noFakeVariableForInlineOnlyFun.kt"); + } + @Test @TestMetadata("noSynAccessor.kt") public void testNoSynAccessor() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java index d68d84a3bee..773fc6bd90b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java @@ -3282,6 +3282,12 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt"); } + @Test + @TestMetadata("noFakeVariableForInlineOnlyFun.kt") + public void testNoFakeVariableForInlineOnlyFun() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inline/noFakeVariableForInlineOnlyFun.kt"); + } + @Test @TestMetadata("noSynAccessor.kt") public void testNoSynAccessor() throws Exception {