JVM_IR KT-34594 don't generate fake local variable for @InlineOnly

This commit is contained in:
Dmitry Petrov
2021-07-30 09:30:17 +03:00
parent 32b380e187
commit 37050e0616
5 changed files with 37 additions and 1 deletions
@@ -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 {
@@ -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()
}
}
@@ -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
@@ -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 {
@@ -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 {