From b1ab64e854eab68fc8c12eff13c911481de74964 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 10 Feb 2021 12:55:28 +0300 Subject: [PATCH] JVM_IR KT-44483 argument adaptation is already done in PSI2IR --- .../FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../jvm/lower/FunctionReferenceLowering.kt | 19 ------------------- .../codegen/box/callableReference/kt37604.kt | 1 - .../codegen/box/callableReference/kt44483.kt | 10 ++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ .../IrJsCodegenBoxES6TestGenerated.java | 5 +++++ .../IrJsCodegenBoxTestGenerated.java | 5 +++++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++++ 10 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 compiler/testData/codegen/box/callableReference/kt44483.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 12d4bc176b0..d73b671d298 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 @@ -2440,6 +2440,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/callableReference/kt37604.kt"); } + @Test + @TestMetadata("kt44483.kt") + public void testKt44483() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt44483.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() 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 c44ca3b79e5..3d8f437d579 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,25 +574,6 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext) else irGet(receiver!!) - // If a vararg parameter corresponds to exactly one KFunction argument, which is an array, that array - // is forwarded as is. - // - // fun f(x: (Int, Array) -> String) = x(0, arrayOf("OK", "FAIL")) - // fun h(i: Int, vararg xs: String) = xs[i] - // f(::h) - // - parameter.isVararg && unboundIndex < argumentTypes.size && parameter.type == valueParameters[unboundIndex].type -> - irGet(valueParameters[unboundIndex++]) - // In all other cases, excess arguments are packed into a new array. - // - // fun g(x: (Int, String, String) -> String) = x(0, "OK", "FAIL") - // f(::h) == g(::h) - // - parameter.isVararg && (unboundIndex < argumentTypes.size || !parameter.hasDefaultValue()) -> - irArray(parameter.type) { - (unboundIndex until argumentTypes.size).forEach { +irGet(valueParameters[unboundIndex++]) } - } - unboundIndex >= argumentTypes.size -> // Default value argument (this pass doesn't handle suspend functions, otherwise // it could also be the continuation argument) diff --git a/compiler/testData/codegen/box/callableReference/kt37604.kt b/compiler/testData/codegen/box/callableReference/kt37604.kt index 83f13e70955..a62e2771d30 100644 --- a/compiler/testData/codegen/box/callableReference/kt37604.kt +++ b/compiler/testData/codegen/box/callableReference/kt37604.kt @@ -1,4 +1,3 @@ - fun useUnit(fn: () -> Unit) { fn.invoke() } diff --git a/compiler/testData/codegen/box/callableReference/kt44483.kt b/compiler/testData/codegen/box/callableReference/kt44483.kt new file mode 100644 index 00000000000..25e2fbacd94 --- /dev/null +++ b/compiler/testData/codegen/box/callableReference/kt44483.kt @@ -0,0 +1,10 @@ +// DONT_TARGET_EXACT_BACKEND: WASM +// WITH_RUNTIME + +fun f(vararg p: Pair): K = p[0].first + +fun box(): String { + // NB this is not an adapted function reference + val f: (Array>) -> String = ::f + return f(arrayOf("OK" to 0)) +} \ 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 abbfa3e01ed..f5eca379772 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 @@ -2440,6 +2440,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/callableReference/kt37604.kt"); } + @Test + @TestMetadata("kt44483.kt") + public void testKt44483() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt44483.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() 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 1339990eb35..1edc33d351b 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 @@ -2440,6 +2440,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/callableReference/kt37604.kt"); } + @Test + @TestMetadata("kt44483.kt") + public void testKt44483() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt44483.kt"); + } + @Test @TestMetadata("nested.kt") public void testNested() 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 2c3562336a8..41c2fd07f52 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -2145,6 +2145,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/callableReference/kt37604.kt"); } + @TestMetadata("kt44483.kt") + public void testKt44483() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt44483.kt"); + } + @TestMetadata("nested.kt") public void testNested() throws Exception { runTest("compiler/testData/codegen/box/callableReference/nested.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 f492eff663c..c7360da197e 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 @@ -1460,6 +1460,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/callableReference/kt37604.kt"); } + @TestMetadata("kt44483.kt") + public void testKt44483() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt44483.kt"); + } + @TestMetadata("nested.kt") public void testNested() throws Exception { runTest("compiler/testData/codegen/box/callableReference/nested.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 21a2241243b..3de8d8634a4 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 @@ -1460,6 +1460,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/kt37604.kt"); } + @TestMetadata("kt44483.kt") + public void testKt44483() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt44483.kt"); + } + @TestMetadata("nested.kt") public void testNested() throws Exception { runTest("compiler/testData/codegen/box/callableReference/nested.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 d3970cd7a30..a1313161de9 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 @@ -1460,6 +1460,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/kt37604.kt"); } + @TestMetadata("kt44483.kt") + public void testKt44483() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/kt44483.kt"); + } + @TestMetadata("nested.kt") public void testNested() throws Exception { runTest("compiler/testData/codegen/box/callableReference/nested.kt");