From 7033d78641b23d7d19f4b61cd120865e5147fef5 Mon Sep 17 00:00:00 2001 From: "vladislav.grechko" Date: Tue, 28 Feb 2023 18:55:49 +0100 Subject: [PATCH] Fix SAM conversion generation condition Remove check if array is passed to vararg parameter as it's not relevant anymore and leads to ^KT-51821. ^KT-51821: Fixed --- .../FirLightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../psi2ir/generators/ArgumentsGenerationUtils.kt | 6 +----- compiler/testData/codegen/box/sam/kt51821.kt | 11 +++++++++++ .../runners/codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../kotlin/js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../js/test/fir/FirJsCodegenBoxTestGenerated.java | 6 ++++++ .../js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../js/test/ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++++++ .../blackboxtest/K2NativeCodegenBoxTestGenerated.java | 6 ++++++ .../blackboxtest/NativeCodegenBoxTestGenerated.java | 6 ++++++ .../wasm/test/IrCodegenBoxWasmTestGenerated.java | 5 +++++ 14 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/codegen/box/sam/kt51821.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 1224a6d50ad..db9edeb3802 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -47661,6 +47661,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/sam/kt50477Enabled.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt52417.kt") public void testKt52417() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 741f2becd79..0f8df87aae0 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -47661,6 +47661,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/sam/kt50477Enabled.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt52417.kt") public void testKt52417() throws Exception { diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt index f81d4c8d561..e05c092b881 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt @@ -634,10 +634,6 @@ fun StatementGenerator.generateSamConversionForValueArgumentsIfRequired(call: Ca "Mismatching resolved call arguments:\n" + "${resolvedCallArguments?.size} != ${underlyingValueParameters.size}" } - val isArrayAssignedToVararg: Boolean = resolvedCallArguments != null && - (underlyingValueParameters zip resolvedCallArguments).any { (param, arg) -> - param.isVararg && arg is ResolvedCallArgument.SimpleArgument && arg.callArgument.isArrayOrArrayLiteral() - } val substitutionContext = call.original.typeArguments.entries.associate { (typeParameterDescriptor, typeArgument) -> underlyingDescriptor.typeParameters[typeParameterDescriptor.index].typeConstructor to TypeProjectionImpl(typeArgument) @@ -648,7 +644,7 @@ fun StatementGenerator.generateSamConversionForValueArgumentsIfRequired(call: Ca val underlyingValueParameter: ValueParameterDescriptor = underlyingValueParameters[i] val expectedSamConversionTypesForVararg = - if (!isArrayAssignedToVararg && resolvedCall is NewResolvedCallImpl<*>) { + if (resolvedCall is NewResolvedCallImpl<*>) { val arguments = resolvedCall.valueArguments[originalValueParameters[i]]?.arguments arguments?.map { resolvedCall.getExpectedTypeForSamConvertedArgument(it) } } else null diff --git a/compiler/testData/codegen/box/sam/kt51821.kt b/compiler/testData/codegen/box/sam/kt51821.kt new file mode 100644 index 00000000000..0c2727fd4d4 --- /dev/null +++ b/compiler/testData/codegen/box/sam/kt51821.kt @@ -0,0 +1,11 @@ +fun interface A { + fun f(x: String): String +} + +fun foo(a: A, vararg s: String): String = + a.f(s[0]) + +fun bar(vararg s: String): String = + foo({ it }, s = s) + +fun box(): String = bar("OK") \ No newline at end of file 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 365c124a6ff..33769e42b8b 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 @@ -45471,6 +45471,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/sam/kt50171.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt52417.kt") public void testKt52417() 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 f313f087a74..4b470431f4d 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 @@ -47661,6 +47661,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/sam/kt50477Enabled.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt52417.kt") public void testKt52417() 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 d1334c843df..633586f0650 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -36716,6 +36716,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/sam/kt50171.kt"); } + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @TestMetadata("kt52417.kt") public void testKt52417() throws Exception { runTest("compiler/testData/codegen/box/sam/kt52417.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index bf169b3f665..037751e2598 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -33965,6 +33965,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/sam/kt17765.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt56188.kt") public void testKt56188() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index 16b78ed1e08..22e5a536dc8 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -34151,6 +34151,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/sam/kt17765.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt56188.kt") public void testKt56188() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index bd62eaf69aa..53e4cda6f16 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -34151,6 +34151,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/sam/kt17765.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt56188.kt") public void testKt56188() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index a493c207d89..2ce5a5182a0 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -34151,6 +34151,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/sam/kt17765.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt56188.kt") public void testKt56188() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/K2NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/K2NativeCodegenBoxTestGenerated.java index c5cbf0c71a7..ec8207c0f35 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/K2NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/K2NativeCodegenBoxTestGenerated.java @@ -37692,6 +37692,12 @@ public class K2NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTes runTest("compiler/testData/codegen/box/sam/kt17765.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt56188.kt") public void testKt56188() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index 5edecce063e..9891efe39fd 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -37226,6 +37226,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/sam/kt17765.kt"); } + @Test + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @Test @TestMetadata("kt56188.kt") public void testKt56188() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java index 4433f288136..40b7cae90ed 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java @@ -30566,6 +30566,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/sam/kt17765.kt"); } + @TestMetadata("kt51821.kt") + public void testKt51821() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt51821.kt"); + } + @TestMetadata("kt56188.kt") public void testKt56188() throws Exception { runTest("compiler/testData/codegen/box/sam/kt56188.kt");