diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt index d86130435fd..302c333b3db 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt @@ -118,6 +118,11 @@ class Fir2IrConversionScope { fun dispatchReceiverParameter(irClass: IrClass): IrValueParameter? { for (function in functionStack.asReversed()) { if (function.parentClassOrNull == irClass) { + // An inner class's constructor needs an instance of the outer class as a dispatch receiver. + // However, if we are converting `this` receiver inside that constructor, now we should point to the inner class instance. + if (function is IrConstructor && irClass.isInner) { + irClass.thisReceiver?.let { return it } + } function.dispatchReceiverParameter?.let { return it } } } diff --git a/compiler/testData/codegen/box/secondaryConstructors/innerClasses.kt b/compiler/testData/codegen/box/secondaryConstructors/innerClasses.kt index aa17bfb4dbd..9d0851c426b 100644 --- a/compiler/testData/codegen/box/secondaryConstructors/innerClasses.kt +++ b/compiler/testData/codegen/box/secondaryConstructors/innerClasses.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR class Outer { val outerProp: String constructor(x: String) { diff --git a/compiler/testData/codegen/box/secondaryConstructors/innerClassesInheritance.kt b/compiler/testData/codegen/box/secondaryConstructors/innerClassesInheritance.kt index e4aaa5c1718..f68b538d5ef 100644 --- a/compiler/testData/codegen/box/secondaryConstructors/innerClassesInheritance.kt +++ b/compiler/testData/codegen/box/secondaryConstructors/innerClassesInheritance.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR class Outer { val outerProp: String constructor(x: String) {