From 9816e62d08757fc7a9da13bb76ec180faad09032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Fri, 19 Jul 2019 10:49:44 +0200 Subject: [PATCH] JVM_IR: Fix inlining of interface methods --- .../kotlin/backend/common/ir/IrUtils.kt | 3 ++- .../inline/interfaceDefaultMethod.kt | 16 ++++++++++++++++ .../codegen/BytecodeTextTestGenerated.java | 5 +++++ .../codegen/ir/IrBytecodeTextTestGenerated.java | 5 +++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/bytecodeText/inline/interfaceDefaultMethod.kt diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 19ba10e4c01..4974735fa39 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -523,7 +523,8 @@ fun createStaticFunctionWithReceivers( oldFunction.visibility, Modality.FINAL, oldFunction.returnType, - isInline = false, isExternal = false, isTailrec = false, isSuspend = false + isInline = oldFunction.isInline, + isExternal = false, isTailrec = false, isSuspend = false ).apply { descriptor.bind(this) parent = irParent diff --git a/compiler/testData/codegen/bytecodeText/inline/interfaceDefaultMethod.kt b/compiler/testData/codegen/bytecodeText/inline/interfaceDefaultMethod.kt new file mode 100644 index 00000000000..ca2701f4da1 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/inline/interfaceDefaultMethod.kt @@ -0,0 +1,16 @@ +interface A { + private inline fun callDefault(b: () -> String): String { + "String" is T + return b() + } + + fun ok() = callDefault { "OK" } +} + +class B : A + +fun box(): String { + return B().ok() +} + +// 0 INVOKESTATIC A$DefaultImpls.callDefault \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 869913f20ce..f0e1f5a857e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -2277,6 +2277,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inline/inlineSuspendReifiedNoSpilling.kt"); } + @TestMetadata("interfaceDefaultMethod.kt") + public void testInterfaceDefaultMethod() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inline/interfaceDefaultMethod.kt"); + } + @TestMetadata("linenumberForOneParametersArgumentCall.kt") public void testLinenumberForOneParametersArgumentCall() throws Exception { runTest("compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java index 3bcbe847b0a..6a420f47226 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java @@ -2247,6 +2247,11 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inline/inlineSuspendReifiedNoSpilling.kt"); } + @TestMetadata("interfaceDefaultMethod.kt") + public void testInterfaceDefaultMethod() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inline/interfaceDefaultMethod.kt"); + } + @TestMetadata("linenumberForOneParametersArgumentCall.kt") public void testLinenumberForOneParametersArgumentCall() throws Exception { runTest("compiler/testData/codegen/bytecodeText/inline/linenumberForOneParametersArgumentCall.kt");