diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 432613813f3..af3b915b6b4 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -19193,6 +19193,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inlineClasses/funInterface/javaSamReturnResult.kt"); } + @Test + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @Test @TestMetadata("returnIC.kt") public void testReturnIC() throws Exception { 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 6a29711e574..456682bacca 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 @@ -3572,6 +3572,24 @@ public class FirBytecodeTextTestGenerated extends AbstractFirBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledInlineClassInterfaceImplementation.kt"); } + @Test + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappers.kt"); + } + + @Test + @TestMetadata("mangledSamWrappersIndy.kt") + public void testMangledSamWrappersIndy() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersIndy.kt"); + } + + @Test + @TestMetadata("mangledSamWrappersOld.kt") + public void testMangledSamWrappersOld() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersOld.kt"); + } + @Test @TestMetadata("noActualCallsOfInlineFunctionsOfInlineClass.kt") public void testNoActualCallsOfInlineFunctionsOfInlineClass() throws Exception { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt index 8c1fca01650..ffbad6d3011 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt @@ -574,15 +574,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext) private fun createInvokeMethod(receiverVar: IrValueDeclaration?): IrSimpleFunction = functionReferenceClass.addFunction { setSourceRange(if (isLambda) callee else irFunctionReference) - name = - if (samSuperType == null && callee.returnType.isInlineClassType() && - context.state.functionsWithInlineClassReturnTypesMangled - ) { - // For functions with inline class return type we need to mangle the invoke method. - // Otherwise, bridge lowering may fail to generate bridges for inline class types erasing to Any. - val suffix = InlineClassAbi.hashReturnSuffix(callee) - Name.identifier("${superMethod.name.asString()}-${suffix}") - } else superMethod.name + name = superMethod.name returnType = callee.returnType isSuspend = callee.isSuspend }.apply { diff --git a/compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt b/compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt new file mode 100644 index 00000000000..19d7612391a --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt @@ -0,0 +1,17 @@ +// IGNORE_BACKEND: JVM +// IGNORE_BACKEND: WASM +// !LANGUAGE: +InlineClasses +inline class A(val value: String) + +fun interface B { + fun f(x: A): A +} + +inline fun g(unit: Unit = Unit, b: B): A { + return b.f(A("Fail")) +} + +fun box(): String { + val b = { _ : A -> A("O") } + return g(b = b).value + g { A("K") }.value +} diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappers.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappers.kt new file mode 100644 index 00000000000..00e27518734 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappers.kt @@ -0,0 +1,32 @@ +// !LANGUAGE: +InlineClasses +inline class A(val value: String) + +fun interface B { + fun f(x: A): A +} + +inline fun g(unit: Unit = Unit, b: B): A { + return b.f(A("Fail")) +} + +fun box(): String { + val b = { _ : A -> A("OK") } + return g(b = b).value +} + +// @B.class: +// 1 public abstract f-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; +// @MangledSamWrappersKt.class: +// 3 INVOKEINTERFACE B.f-ZsE1S_E \(Ljava/lang/String;\)Ljava/lang/String; +// @MangledSamWrappersKt$sam$B$0.class: +// public final synthetic f-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; + +// JVM_TEMPLATES: +// @MangledSamWrappersKt$box$b$1.class: +// 1 public final invoke\(Ljava/lang/String;\)LA; + +// JVM_IR_TEMPLATES: +// @MangledSamWrappersKt$box$b$1.class: +// 0 public final invoke-ZsE1S_E-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; +// 1 public final invoke-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; +// 1 public synthetic bridge invoke\(Ljava/lang/Object;\)Ljava/lang/Object; diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersIndy.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersIndy.kt new file mode 100644 index 00000000000..5272c66f53b --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersIndy.kt @@ -0,0 +1,30 @@ +// IGNORE_BACKEND: JVM +// !LANGUAGE: +InlineClasses +// LAMBDAS: INDY + +inline class A(val value: String?) + +fun interface B { + fun f(x: A): A +} + +inline fun g(unit: Unit = Unit, b: B): A { + return b.f(A("Fail")) +} + +fun box(): String { + val b = { _ : A -> A("OK") } + return g(b = b).value!! +} + +// 0 public final invoke-ZsE1S_E-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; +// 0 public final invoke-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; +// 0 public synthetic bridge invoke\(Ljava/lang/Object;\)Ljava/lang/Object; + +// @B.class: +// 1 public abstract f-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; +// @MangledSamWrappersKt.class: +// 3 INVOKEINTERFACE B.f-ZsE1S_E \(Ljava/lang/String;\)Ljava/lang/String; +// 1 private final static box\$lambda-0\(LA;\)LA; +// @MangledSamWrappersKt$sam$B$0.class: +// public final synthetic f-ZsE1S_E\(Ljava/lang/String;\)Ljava/lang/String; \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersOld.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersOld.kt new file mode 100644 index 00000000000..06423af0d27 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersOld.kt @@ -0,0 +1,33 @@ +// !LANGUAGE: +InlineClasses +// USE_OLD_INLINE_CLASSES_MANGLING_SCHEME +inline class A(val value: String) + +fun interface B { + fun f(x: A): A +} + +inline fun g(unit: Unit = Unit, b: B): A { + return b.f(A("Fail")) +} + +fun box(): String { + val b = { _ : A -> A("OK") } + return g(b = b).value +} + +// @B.class: +// 1 public abstract f-iUtXLc0\(Ljava/lang/String;\)Ljava/lang/String; +// @MangledSamWrappersKt.class: +// 3 INVOKEINTERFACE B.f-iUtXLc0 \(Ljava/lang/String;\)Ljava/lang/String; +// @MangledSamWrappersKt$sam$B$0.class: +// public final synthetic f-iUtXLc0\(Ljava/lang/String;\)Ljava/lang/String; + +// JVM_TEMPLATES: +// @MangledSamWrappersKt$box$b$1.class: +// 1 public final invoke\(Ljava/lang/String;\)LA; + +// JVM_IR_TEMPLATES: +// @MangledSamWrappersKt$box$b$1.class: +// 0 public final invoke-iUtXLc0-iUtXLc0\(Ljava/lang/String;\)Ljava/lang/String; +// 1 public final invoke-iUtXLc0\(Ljava/lang/String;\)Ljava/lang/String; +// 1 public synthetic bridge invoke\(Ljava/lang/Object;\)Ljava/lang/Object; diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 6465828c581..7c3218bb87d 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -19169,6 +19169,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/javaSamReturnResult.kt"); } + @Test + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @Test @TestMetadata("returnIC.kt") public void testReturnIC() throws Exception { 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 704806889cb..47b402553a6 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 @@ -3440,6 +3440,24 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledInlineClassInterfaceImplementation.kt"); } + @Test + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappers.kt"); + } + + @Test + @TestMetadata("mangledSamWrappersIndy.kt") + public void testMangledSamWrappersIndy() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersIndy.kt"); + } + + @Test + @TestMetadata("mangledSamWrappersOld.kt") + public void testMangledSamWrappersOld() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersOld.kt"); + } + @Test @TestMetadata("noActualCallsOfInlineFunctionsOfInlineClass.kt") public void testNoActualCallsOfInlineFunctionsOfInlineClass() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 7c896a492f4..7065c7f46a3 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -19193,6 +19193,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/funInterface/javaSamReturnResult.kt"); } + @Test + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @Test @TestMetadata("returnIC.kt") public void testReturnIC() 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 1f25452602b..c9e86fe7df6 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 @@ -3572,6 +3572,24 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledInlineClassInterfaceImplementation.kt"); } + @Test + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappers.kt"); + } + + @Test + @TestMetadata("mangledSamWrappersIndy.kt") + public void testMangledSamWrappersIndy() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersIndy.kt"); + } + + @Test + @TestMetadata("mangledSamWrappersOld.kt") + public void testMangledSamWrappersOld() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/mangledSamWrappersOld.kt"); + } + @Test @TestMetadata("noActualCallsOfInlineFunctionsOfInlineClass.kt") public void testNoActualCallsOfInlineFunctionsOfInlineClass() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index f49dab68b0f..a0d6f97f184 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15899,6 +15899,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + @TestMetadata("mangledSamWrappers.kt") + public void ignoreMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @TestMetadata("returnIC.kt") public void ignoreReturnIC() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/returnIC.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 3e8d0f5a087..84547c33d1f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -14056,6 +14056,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @TestMetadata("returnIC.kt") public void testReturnIC() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/returnIC.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 91462817b6a..84a5e6c6981 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -13467,6 +13467,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @TestMetadata("returnIC.kt") public void testReturnIC() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/returnIC.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index fd34f00b73c..98f03a63f13 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -13532,6 +13532,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @TestMetadata("returnIC.kt") public void testReturnIC() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/returnIC.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 5ef1a5123e8..d67b61f2574 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -7542,6 +7542,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/inlineClasses/funInterface/argumentResult.kt"); } + @TestMetadata("mangledSamWrappers.kt") + public void testMangledSamWrappers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/funInterface/mangledSamWrappers.kt"); + } + @TestMetadata("returnIC.kt") public void testReturnIC() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/funInterface/returnIC.kt");