diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index eb363d1c8dc..d76c2b93551 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -35313,6 +35313,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index b5b141cc46b..d971681b9ba 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -35313,6 +35313,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 97ab9f50453..69d3628af38 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -34898,6 +34898,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index b18bf64f404..471f937cf3f 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -34898,6 +34898,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index f5bd985e660..e5af50f22d4 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -34898,6 +34898,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt index 00fdd7f31cc..fa923bab4ce 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt @@ -95,6 +95,7 @@ internal open class ActualizerVisitor(private val symbolRemapper: SymbolRemapper override fun visitClass(declaration: IrClass) = declaration.also { + if (declaration.isExpect) return@also it.superTypes = it.superTypes.map { superType -> superType.remapType() } it.transformChildren(this, null) it.transformAnnotations(declaration) @@ -104,6 +105,7 @@ internal open class ActualizerVisitor(private val symbolRemapper: SymbolRemapper } override fun visitSimpleFunction(declaration: IrSimpleFunction) = (visitFunction(declaration) as IrSimpleFunction).also { + if (declaration.isExpect) return@also it.overriddenSymbols = it.overriddenSymbols.memoryOptimizedMap { symbol -> symbolRemapper.getReferencedFunction(symbol) as IrSimpleFunctionSymbol } @@ -113,6 +115,7 @@ internal open class ActualizerVisitor(private val symbolRemapper: SymbolRemapper override fun visitFunction(declaration: IrFunction) = declaration.also { + if (declaration.isExpect) return@also it.returnType = it.returnType.remapType() it.transformChildren(this, null) it.transformAnnotations(declaration) @@ -120,6 +123,7 @@ internal open class ActualizerVisitor(private val symbolRemapper: SymbolRemapper override fun visitProperty(declaration: IrProperty) = declaration.also { + if (declaration.isExpect) return@also it.transformChildren(this, null) it.overriddenSymbols = it.overriddenSymbols.memoryOptimizedMap { symbol -> symbolRemapper.getReferencedProperty(symbol) diff --git a/compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt b/compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt new file mode 100644 index 00000000000..9b3b3a62dff --- /dev/null +++ b/compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt @@ -0,0 +1,24 @@ +// LANGUAGE: +MultiPlatformProjects + +// MODULE: lib-common +// FILE: common.kt + + +abstract expect class Base +expect class Child : Base + + +// MODULE: lib()()(lib-common) +// FILE: platform.kt + +actual abstract class Base() { + abstract fun foo(): Any +} + +actual class Child: Base() { + override fun foo(): String = "OK" +} + +fun box(): String { + return Child().foo() +} diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index 2052c49e5c3..561608cb8fb 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -24464,6 +24464,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java index 04bc9c73b3b..a43c48745e7 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java @@ -24464,6 +24464,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java index 592bfc1760d..d5be8c3fb3a 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java @@ -27829,6 +27829,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java index 4fe49c048d2..d41aa9ca945 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java @@ -28461,6 +28461,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index b3a7c321174..ce846659d53 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -24434,6 +24434,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("covariantOverrideInActual.kt") + public void testCovariantOverrideInActual() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/covariantOverrideInActual.kt"); + } + @Test @TestMetadata("dataClassInCommonAndPlatform.kt") public void testDataClassInCommonAndPlatform() throws Exception {