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 9ef78867e87..f33c7fbec65 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 @@ -15055,6 +15055,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/innerNested/innerSimple.kt"); } + @TestMetadata("innerWithDefaultArgument.kt") + public void testInnerWithDefaultArgument() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.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 129fbc80def..d85a7e28e97 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 @@ -46,10 +46,11 @@ class InnerClassesLowering(val context: BackendContext, private val innerClasses val newConstructor = lowerConstructor(declaration) val oldConstructorParameterToNew = innerClassesSupport.primaryConstructorParameterMap(declaration) + val variableRemapper = VariableRemapper(oldConstructorParameterToNew) for ((oldParam, newParam) in oldConstructorParameterToNew.entries) { newParam.defaultValue = oldParam.defaultValue?.let { oldDefault -> context.irFactory.createExpressionBody(oldDefault.startOffset, oldDefault.endOffset) { - expression = oldDefault.expression.patchDeclarationParents(newConstructor) + expression = oldDefault.expression.transform(variableRemapper, null).patchDeclarationParents(newConstructor) } } } diff --git a/compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt b/compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt new file mode 100644 index 00000000000..93dd4786e86 --- /dev/null +++ b/compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt @@ -0,0 +1,14 @@ + +// KT-40771 + + +class Outer(val o: String, val oo: String = o) { + inner class Inner(val k: String, val kk: String = k) +} + +fun box(): String { + val o = Outer("O") + val i = o.Inner("K") + + return o.oo + i.kk +} \ 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 b7ee8857843..05364dafe47 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -16450,6 +16450,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/innerNested/innerSimple.kt"); } + @TestMetadata("innerWithDefaultArgument.kt") + public void testInnerWithDefaultArgument() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.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 1fcc1f299a4..9370cc7962b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -16450,6 +16450,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/innerNested/innerSimple.kt"); } + @TestMetadata("innerWithDefaultArgument.kt") + public void testInnerWithDefaultArgument() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.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 3d2e468f177..ce703a9799c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -15055,6 +15055,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/innerNested/innerSimple.kt"); } + @TestMetadata("innerWithDefaultArgument.kt") + public void testInnerWithDefaultArgument() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.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 2f053d982cd..2009d1fb431 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 @@ -13055,6 +13055,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/innerNested/innerSimple.kt"); } + @TestMetadata("innerWithDefaultArgument.kt") + public void testInnerWithDefaultArgument() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.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 a9a1376faf1..606d31fc2cd 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 @@ -13055,6 +13055,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/innerNested/innerSimple.kt"); } + @TestMetadata("innerWithDefaultArgument.kt") + public void testInnerWithDefaultArgument() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.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 6059bac5be6..68ed0d86378 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 @@ -13120,6 +13120,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/innerNested/innerSimple.kt"); } + @TestMetadata("innerWithDefaultArgument.kt") + public void testInnerWithDefaultArgument() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/innerWithDefaultArgument.kt"); + } + @TestMetadata("kt3132.kt") public void testKt3132() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt3132.kt");