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 00c8cbf43b3e63c052f78946d076f1a7ceda7551..3c42afe85b98531dfb4c70fca4a35708d23cdbb3 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 d03fdd42e89b3805201ca29016033eb55a250847..9c578f8d80b000cb0aaeff4e585365253957506b 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 0000000000000000000000000000000000000000..7a80c893d326ea4acb8e459a8743e40adc657b9e --- /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 888309c1ff453ed4ec0399894ae4e9e6b9294453..42fc63227c826fb05718dc15b41aa18a9ad9de2d 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 3039cd7b06cacaf3bad25a996a30aa7d71c1c03a..9ae4d250d51a54469b0559d74b13859ac1f74356 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 a3c67a0789927b1e8aaf6bbabaca829ae18eba0f..0504e65b75ff21b957b4be4c8bee8cef31968d0e 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 de260ede93e821f6f6a755ca7890720105bef1cf..d59779ba6cb9a682922690e70aa1e6a06e3611c9 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 479f513a64456ca25fc9e9dc5edf47f6b285977c..13393d52079af6d65541ad99edb4d1d04110da98 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 6dbc6998acc85e816a23f4f8ee217908e006e36a..d2a6e694242021a88e84f6c2d4d194c90cf1f693 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 c4bbcb442e308b9e89d384a3fc4f2e7cf7243de5..e95c41dfedda0d1b3088b2ce1bc6c3f8fd5475c5 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")