diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index df645ee4e63..edc9c50b4ea 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -15337,6 +15337,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt"); diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index 70b0a778377..8b19b60b57f 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -97,10 +97,18 @@ private fun InnerClassesSupport.primaryConstructorParameterMap(originalConstruct val loweredConstructor = getInnerClassConstructorWithOuterThisParameter(originalConstructor) - originalConstructor.valueParameters.forEach { old -> - oldConstructorParameterToNew[old] = loweredConstructor.valueParameters[old.index + 1] + var index = 0 + + originalConstructor.dispatchReceiverParameter?.let { + oldConstructorParameterToNew[it] = loweredConstructor.valueParameters[index++] } + originalConstructor.valueParameters.forEach { old -> + oldConstructorParameterToNew[old] = loweredConstructor.valueParameters[index++] + } + + assert(loweredConstructor.valueParameters.size == index) + return oldConstructorParameterToNew } diff --git a/compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt b/compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt new file mode 100644 index 00000000000..733e0efbee8 --- /dev/null +++ b/compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt @@ -0,0 +1,24 @@ + +// KT-40686 + + +class Outer(val o: String, val oo: String) { + inner class InnerArg(val i: String) { + val result: String get() = o + i + } + + inner class InnerParam(val i: InnerArg = InnerArg("B")) { + fun foo() = i.result + oo + } +} + + +fun box(): String { + val o = Outer("A", "C") + val i = o.InnerParam() + + val rr = i.foo() + if (rr != "ABC") return "FAIL: $rr" + + 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 79d29e35a14..84627960359 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -16737,6 +16737,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index d9ede1125ca..19c32945df6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -16737,6 +16737,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 416626a1a36..b7261d7507b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -15337,6 +15337,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index f912b53c80b..9e7dde16038 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -13302,6 +13302,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index e17a9446dab..1cc3f93e591 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -13302,6 +13302,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.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 50ca73ff7af..177ca42bf1b 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 @@ -13367,6 +13367,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index c149ac570e2..ba7392a379a 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -7632,6 +7632,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); } + @TestMetadata("innerWithDefaultInner.kt") + public void testInnerWithDefaultInner() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultInner.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt");