From 0b5ec5535cbd564aaeb27870395d4a342711ceae Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Tue, 1 Jun 2021 13:39:33 +0200 Subject: [PATCH] [JVM_IR] Add `String.plus(Any)` to intrinsics list. This filters it out for use in SAM wrapper generation with invoke-dynamic. The intrinsic is not actually used for code generation so it is added to the list of intrinsics that should have been lowered away before codegen. ^KT-45779 Fixed --- .../FirBlackBoxCodegenTestGenerated.java | 6 +++++ .../jvm/intrinsics/IrIntrinsicMethods.kt | 6 ++--- .../codegen/box/invokedynamic/sam/kt45779.kt | 26 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ 6 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt 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 c7c14ea253c..ed1ecf939c5 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 @@ -21241,6 +21241,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/invokedynamic/sam/intReturnTypeAsNumber.kt"); } + @Test + @TestMetadata("kt45779.kt") + public void testKt45779() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt"); + } + @Test @TestMetadata("nullabilityAssertions.kt") public void testNullabilityAssertions() throws Exception { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt index 59f01544f22..798be9bd785 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt @@ -19,10 +19,7 @@ package org.jetbrains.kotlin.backend.jvm.intrinsics import org.jetbrains.kotlin.backend.jvm.JvmSymbols import org.jetbrains.kotlin.builtins.PrimitiveType import org.jetbrains.kotlin.builtins.StandardNames -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrPackageFragment -import org.jetbrains.kotlin.ir.declarations.IrTypeParameter -import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol @@ -134,6 +131,7 @@ class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) { } + listOf( Key(kotlinFqn, anyFqn, "toString", emptyList()), Key(kotlinFqn, null, "arrayOf", listOf(arrayFqn)), + Key(stringFqn, null, "plus", listOf(anyFqn)), )).map { it to IntrinsicShouldHaveBeenLowered } private val PrimitiveType.symbol diff --git a/compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt b/compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt new file mode 100644 index 00000000000..8860cdc93ee --- /dev/null +++ b/compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt @@ -0,0 +1,26 @@ +// TARGET_BACKEND: JVM +// JVM_TARGET: 1.8 +// SAM_CONVERSIONS: INDY +// WITH_RUNTIME + +// CHECK_BYTECODE_TEXT +// JVM_IR_TEMPLATES +// 0 java/lang/invoke/LambdaMetafactory + +// FILE: BiFunction.java + +public interface BiFunction { + R apply(T1 t1, T2 t2); +} + +// FILE: Operators.java + +public class Operators { + public static R combine(T1 a, T2 b, BiFunction combiner) { + return combiner.apply(a, b); + } +} + +// FILE: main.kt + +fun box() = Operators.combine("O", "K", String::plus) 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 98767038719..65d53e51b62 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 @@ -21211,6 +21211,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/invokedynamic/sam/intReturnTypeAsNumber.kt"); } + @Test + @TestMetadata("kt45779.kt") + public void testKt45779() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt"); + } + @Test @TestMetadata("nullabilityAssertions.kt") public void testNullabilityAssertions() 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 f4b8e7f1590..fc6090cf327 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 @@ -21241,6 +21241,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/invokedynamic/sam/intReturnTypeAsNumber.kt"); } + @Test + @TestMetadata("kt45779.kt") + public void testKt45779() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt"); + } + @Test @TestMetadata("nullabilityAssertions.kt") public void testNullabilityAssertions() 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 86da0f80cdb..f0822c989df 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -17726,6 +17726,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/invokedynamic/sam/intReturnTypeAsNumber.kt"); } + @TestMetadata("kt45779.kt") + public void testKt45779() throws Exception { + runTest("compiler/testData/codegen/box/invokedynamic/sam/kt45779.kt"); + } + @TestMetadata("nullabilityAssertions.kt") public void testNullabilityAssertions() throws Exception { runTest("compiler/testData/codegen/box/invokedynamic/sam/nullabilityAssertions.kt");