diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 4ba50155302..16f4007a1b2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -1266,7 +1266,8 @@ public class FunctionCodegen { Label loadArg = new Label(); iv.ifeq(loadArg); - StackValue.local(parameterIndex, type).store(loadStrategy.genValue(parameterDescriptor, codegen), iv); + StackValue.local(parameterIndex, type, parameterDescriptor.getType()) + .store(loadStrategy.genValue(parameterDescriptor, codegen), iv); iv.mark(loadArg); } diff --git a/compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt b/compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt new file mode 100644 index 00000000000..739c1495835 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt @@ -0,0 +1,15 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR + +inline class Z(val z: Int) + +class Test(val z: Z = Z(42)) { + fun test() = z.z +} + +fun box(): String { + if (Test().test() != 42) throw AssertionError() + if (Test(Z(123)).test() != 123) throw AssertionError() + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt b/compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt new file mode 100644 index 00000000000..fcf46728a9b --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt @@ -0,0 +1,24 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR + +inline class Z(val z: Int) + +interface ITest { + fun testDefault(z: Z = Z(42)) = z.z + + fun testOverridden(z: Z = Z(42)): Int +} + +class Test : ITest { + override fun testOverridden(z: Z) = z.z +} + +fun box(): String { + if (Test().testDefault() != 42) throw AssertionError() + if (Test().testDefault(Z(123)) != 123) throw AssertionError() + + if (Test().testOverridden() != 42) throw AssertionError() + if (Test().testOverridden(Z(123)) != 123) throw AssertionError() + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt b/compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt new file mode 100644 index 00000000000..598da12d996 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt @@ -0,0 +1,13 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR + +inline class Z(val z: Int) + +fun test(z: Z = Z(42)) = z.z + +fun box(): String { + if (test() != 42) throw AssertionError() + if (test(Z(123)) != 123) throw AssertionError() + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt b/compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt new file mode 100644 index 00000000000..d5547da10fe --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt @@ -0,0 +1,29 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR + +interface IFoo { + fun foo(): String +} + +inline class Z(val z: Int) : IFoo { + override fun foo() = z.toString() +} + +fun testNullable(z: Z? = Z(42)) = z!!.z + +fun testAny(z: Any = Z(42)) = (z as Z).z + +fun testInterface(z: IFoo = Z(42)) = z.foo() + +fun box(): String { + if (testNullable() != 42) throw AssertionError() + if (testNullable(Z(123)) != 123) throw AssertionError() + + if (testAny() != 42) throw AssertionError() + if (testAny(Z(123)) != 123) throw AssertionError() + + if (testInterface() != "42") throw AssertionError() + if (testInterface(Z(123)) != "123") throw AssertionError() + + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 0fa268b12d1..e7131307e0b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -11649,11 +11649,31 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/crossinlineWithInlineClassInParameter.kt"); } + @TestMetadata("defaultConstructorParameterValuesOfInlineClassType.kt") + public void testDefaultConstructorParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt"); + } + @TestMetadata("defaultFunctionsFromAnyForInlineClass.kt") public void testDefaultFunctionsFromAnyForInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceFunParameterValuesOfInlineClassType.kt") + public void testDefaultInterfaceFunParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassType.kt") + public void testDefaultParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassTypeBoxing.kt") + public void testDefaultParameterValuesOfInlineClassTypeBoxing() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt"); + } + @TestMetadata("defaultValueOfInlineClassTypeInInlineFun.kt") public void testDefaultValueOfInlineClassTypeInInlineFun() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultValueOfInlineClassTypeInInlineFun.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 476f0cf4ae7..354c36d1e21 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -11649,11 +11649,31 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/crossinlineWithInlineClassInParameter.kt"); } + @TestMetadata("defaultConstructorParameterValuesOfInlineClassType.kt") + public void testDefaultConstructorParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt"); + } + @TestMetadata("defaultFunctionsFromAnyForInlineClass.kt") public void testDefaultFunctionsFromAnyForInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceFunParameterValuesOfInlineClassType.kt") + public void testDefaultInterfaceFunParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassType.kt") + public void testDefaultParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassTypeBoxing.kt") + public void testDefaultParameterValuesOfInlineClassTypeBoxing() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt"); + } + @TestMetadata("defaultValueOfInlineClassTypeInInlineFun.kt") public void testDefaultValueOfInlineClassTypeInInlineFun() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultValueOfInlineClassTypeInInlineFun.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index c7c11a1a652..2be80cbc00f 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11654,11 +11654,31 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/crossinlineWithInlineClassInParameter.kt"); } + @TestMetadata("defaultConstructorParameterValuesOfInlineClassType.kt") + public void testDefaultConstructorParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt"); + } + @TestMetadata("defaultFunctionsFromAnyForInlineClass.kt") public void testDefaultFunctionsFromAnyForInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceFunParameterValuesOfInlineClassType.kt") + public void testDefaultInterfaceFunParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassType.kt") + public void testDefaultParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassTypeBoxing.kt") + public void testDefaultParameterValuesOfInlineClassTypeBoxing() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt"); + } + @TestMetadata("defaultValueOfInlineClassTypeInInlineFun.kt") public void testDefaultValueOfInlineClassTypeInInlineFun() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultValueOfInlineClassTypeInInlineFun.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java index 5ba68a17468..f0bf329bc8f 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java @@ -10189,11 +10189,31 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/crossinlineWithInlineClassInParameter.kt"); } + @TestMetadata("defaultConstructorParameterValuesOfInlineClassType.kt") + public void testDefaultConstructorParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt"); + } + @TestMetadata("defaultFunctionsFromAnyForInlineClass.kt") public void testDefaultFunctionsFromAnyForInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceFunParameterValuesOfInlineClassType.kt") + public void testDefaultInterfaceFunParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassType.kt") + public void testDefaultParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassTypeBoxing.kt") + public void testDefaultParameterValuesOfInlineClassTypeBoxing() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt"); + } + @TestMetadata("defaultValueOfInlineClassTypeInInlineFun.kt") public void testDefaultValueOfInlineClassTypeInInlineFun() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultValueOfInlineClassTypeInInlineFun.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index c00a25dea7b..cb9bb34b331 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -11234,11 +11234,31 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/crossinlineWithInlineClassInParameter.kt"); } + @TestMetadata("defaultConstructorParameterValuesOfInlineClassType.kt") + public void testDefaultConstructorParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultConstructorParameterValuesOfInlineClassType.kt"); + } + @TestMetadata("defaultFunctionsFromAnyForInlineClass.kt") public void testDefaultFunctionsFromAnyForInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultFunctionsFromAnyForInlineClass.kt"); } + @TestMetadata("defaultInterfaceFunParameterValuesOfInlineClassType.kt") + public void testDefaultInterfaceFunParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultInterfaceFunParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassType.kt") + public void testDefaultParameterValuesOfInlineClassType() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassType.kt"); + } + + @TestMetadata("defaultParameterValuesOfInlineClassTypeBoxing.kt") + public void testDefaultParameterValuesOfInlineClassTypeBoxing() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValuesOfInlineClassTypeBoxing.kt"); + } + @TestMetadata("defaultValueOfInlineClassTypeInInlineFun.kt") public void testDefaultValueOfInlineClassTypeInInlineFun() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/defaultValueOfInlineClassTypeInInlineFun.kt");