From 4c3ffc3451599c59bfc4bf3514758767622ef363 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 1 Dec 2020 09:00:46 +0300 Subject: [PATCH] JVM_IR KT-41911 process big arity 'invoke' arguments recursively --- .../ir/FirBlackBoxCodegenTestGenerated.java | 5 +++++ .../jvm/lower/FunctionNVarargBridgeLowering.kt | 9 +++++++-- .../bigArity/nestedBigArityFunCalls.kt | 17 +++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 +++++ .../IrJsCodegenBoxES6TestGenerated.java | 5 +++++ .../semantics/IrJsCodegenBoxTestGenerated.java | 5 +++++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++++ .../IrCodegenBoxWasmTestGenerated.java | 5 +++++ 10 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 00c8cbf43b3..3c42afe85b9 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -12572,6 +12572,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/functions/bigArity/javaLambda.kt"); } + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } + @TestMetadata("subclass.kt") public void testSubclass() throws Exception { runTest("compiler/testData/codegen/box/functions/bigArity/subclass.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt index d03fdd42e89..9c578f8d80b 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt @@ -57,16 +57,21 @@ private class FunctionNVarargBridgeLowering(val context: JvmBackendContext) : at(expression) irCall(functionNInvokeFun).apply { dispatchReceiver = irImplicitCast( - expression.dispatchReceiver!!, + expression.dispatchReceiver!!.transformVoid(), this@FunctionNVarargBridgeLowering.context.ir.symbols.functionN.defaultType ) putValueArgument(0, irArray(irSymbols.array.typeWith(context.irBuiltIns.anyNType)) { - (0 until expression.valueArgumentsCount).forEach { +expression.getValueArgument(it)!! } + (0 until expression.valueArgumentsCount).forEach { + +expression.getValueArgument(it)!!.transformVoid() + } }) } } } + private fun IrExpression.transformVoid() = + transform(this@FunctionNVarargBridgeLowering, null) + override fun visitClassNew(declaration: IrClass): IrStatement { val bigArityFunctionSuperTypes = declaration.superTypes.filterIsInstance().filter { it.isFunctionType && it.arguments.size > BuiltInFunctionArity.BIG_ARITY diff --git a/compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt b/compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt new file mode 100644 index 00000000000..7a80c893d32 --- /dev/null +++ b/compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt @@ -0,0 +1,17 @@ +interface A +object O : A + +typealias F = (A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, T) -> String + +fun test(f: F>): String = + f(O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O) { + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, s -> + s + } + +fun box(): String { + return test { + _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, f -> + f(O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, "OK") + } +} \ No newline at end of file diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 888309c1ff4..42fc63227c8 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -13972,6 +13972,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/functions/bigArity/javaLambda.kt"); } + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } + @TestMetadata("subclass.kt") public void testSubclass() throws Exception { runTest("compiler/testData/codegen/box/functions/bigArity/subclass.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 3039cd7b06c..9ae4d250d51 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13972,6 +13972,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/functions/bigArity/javaLambda.kt"); } + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } + @TestMetadata("subclass.kt") public void testSubclass() throws Exception { runTest("compiler/testData/codegen/box/functions/bigArity/subclass.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index a3c67a07899..0504e65b75f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -12572,6 +12572,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/functions/bigArity/javaLambda.kt"); } + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } + @TestMetadata("subclass.kt") public void testSubclass() throws Exception { runTest("compiler/testData/codegen/box/functions/bigArity/subclass.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 de260ede93e..d59779ba6cb 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 @@ -10787,6 +10787,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/functions/bigArity/invokeMemberCallableReference.kt"); } + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } + @TestMetadata("subclass.kt") public void testSubclass() throws Exception { runTest("compiler/testData/codegen/box/functions/bigArity/subclass.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 479f513a644..13393d52079 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 @@ -10787,6 +10787,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/functions/bigArity/invokeMemberCallableReference.kt"); } + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } + @TestMetadata("subclass.kt") public void testSubclass() throws Exception { runTest("compiler/testData/codegen/box/functions/bigArity/subclass.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 6dbc6998acc..d2a6e694242 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 @@ -10787,6 +10787,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/functions/bigArity/invokeMemberCallableReference.kt"); } + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } + @TestMetadata("subclass.kt") public void testSubclass() throws Exception { runTest("compiler/testData/codegen/box/functions/bigArity/subclass.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 c4bbcb442e3..e95c41dfedd 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 @@ -5461,6 +5461,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest public void testAllFilesPresentInBigArity() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/functions/bigArity"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true); } + + @TestMetadata("nestedBigArityFunCalls.kt") + public void testNestedBigArityFunCalls() throws Exception { + runTest("compiler/testData/codegen/box/functions/bigArity/nestedBigArityFunCalls.kt"); + } } @TestMetadata("compiler/testData/codegen/box/functions/functionExpression") -- GitLab