diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt index 9e02e90df3a..d05dc98b780 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt @@ -205,8 +205,7 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) { frameMap.enter(parameter, typeMapper.mapType(parameter)) } - var mask = 0 - val masks = arrayListOf() + val args = DefaultCallArgs(functionDescriptor.valueParameters.size) for (parameterDescriptor in functionDescriptor.valueParameters) { val paramKotlinType = parameterDescriptor.type val paramType = typeMapper.mapType(paramKotlinType) @@ -215,18 +214,12 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) { StackValue.local(index, paramType, paramKotlinType).put(paramType, paramKotlinType, v) } else { AsmUtil.pushDefaultValueOnStack(paramType, v) - val i = parameterDescriptor.index - if (i != 0 && i % Integer.SIZE == 0) { - masks.add(mask) - mask = 0 - } - mask = mask or (1 shl (i % Integer.SIZE)) + args.mark(parameterDescriptor.index) } } - masks.add(mask) - for (m in masks) { - v.iconst(m) + for (mask in args.toInts()) { + v.iconst(mask) } // for default constructors: just marks default constructor (see DEFAULT_CONSTRUCTOR_MARKER) diff --git a/compiler/testData/codegen/box/jvmOverloads/manyParameters.kt b/compiler/testData/codegen/box/jvmOverloads/manyParameters.kt new file mode 100644 index 00000000000..d7873a92b73 --- /dev/null +++ b/compiler/testData/codegen/box/jvmOverloads/manyParameters.kt @@ -0,0 +1,55 @@ +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// FILE: JavaCall.java + +public class JavaCall { + public static void test() { + new Example(); + new Example("1"); + } +} + +// FILE: Example.kt + +data class Example @JvmOverloads constructor( + var one: String = "", + var two: String = "", + var three: String = "", + var four: String = "", + var five: String = "", + var six: String = "", + var seven: String = "", + var eight: String = "", + var nine: String = "", + var ten: String = "", + var eleven: String = "", + var twelve: String = "", + var thirteen: String = "", + var fourteen: String = "", + var fifteen: String = "", + var sixteen: String = "", + var seventeen: String = "", + var eighteen: String = "", + var nineteen: String = "", + var twenty: String = "", + var twentyOne: String = "", + var twentyTwo: String = "", + var twentyThree: String = "", + var twentyFour: String = "", + var twentyFive: String = "", + var twentySix: String = "", + var twentySeven: String = "", + var twentyEight: String = "", + var twentyNine: String = "", + var thirty: String = "", + var thirtyOne: String = "", + var thirtyTwo: String = "", + var thirtyThree: String = "", + var thirtyFour: String = "" +) + +fun box(): String { + Example() + JavaCall.test() + return "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index d54ee63bf3f..b4c1fd7dcc7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -14879,6 +14879,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/jvmOverloads/innerClass.kt"); } + @TestMetadata("manyParameters.kt") + public void testManyParameters() throws Exception { + runTest("compiler/testData/codegen/box/jvmOverloads/manyParameters.kt"); + } + @TestMetadata("multipleDefaultParameters.kt") public void testMultipleDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/jvmOverloads/multipleDefaultParameters.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 92c84967fa5..20cbbc58503 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14879,6 +14879,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvmOverloads/innerClass.kt"); } + @TestMetadata("manyParameters.kt") + public void testManyParameters() throws Exception { + runTest("compiler/testData/codegen/box/jvmOverloads/manyParameters.kt"); + } + @TestMetadata("multipleDefaultParameters.kt") public void testMultipleDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/jvmOverloads/multipleDefaultParameters.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 98ea084d2f2..45d77e58a77 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -13769,6 +13769,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvmOverloads/innerClass.kt"); } + @TestMetadata("manyParameters.kt") + public void testManyParameters() throws Exception { + runTest("compiler/testData/codegen/box/jvmOverloads/manyParameters.kt"); + } + @TestMetadata("multipleDefaultParameters.kt") public void testMultipleDefaultParameters() throws Exception { runTest("compiler/testData/codegen/box/jvmOverloads/multipleDefaultParameters.kt");