diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 5227c8eebeb..9dbdbebf48e 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -1155,7 +1155,7 @@ class Fir2IrDeclarationStorage( parentOrigin: IrDeclarationOrigin, irParent: IrDeclarationParent? ): IrDeclarationOrigin { - return if (irParent.isSourceClass() && symbol.fir.isIntersectionOverride) + return if (irParent.isSourceClass() && (symbol.fir.isIntersectionOverride || symbol.fir.isSubstitutionOverride)) IrDeclarationOrigin.FAKE_OVERRIDE else parentOrigin diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index cef29c06913..6634b3db8fc 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -19869,6 +19869,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt"); diff --git a/compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt b/compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt new file mode 100644 index 00000000000..ff7785b0e0c --- /dev/null +++ b/compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt @@ -0,0 +1,28 @@ +// KT-44054 + +enum class Enum { + Entry1, + Entry2 +} + +class Outer { + fun fooCaller(): Enum = obj.foo() + + private abstract inner class Inner(val default: T) { + fun foo(): T { + return default + } + } + + private val obj = object : Inner(Enum.Entry1) { + fun bar(): Enum { + return default + } + } +} + +fun box(): String { + val o = Outer() + if (o.fooCaller() != Enum.Entry1) return "Fail" + return "OK" +} diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index e8414eca9e5..e410564744f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -19869,6 +19869,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 7d760d24b4d..f0a0aa30766 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -19869,6 +19869,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 3976b72df47..68ee076bc8b 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -19869,6 +19869,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 1b959043d81..a80ed5ea8df 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -15924,6 +15924,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index b04eb141b2c..6152b0e11f5 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -15924,6 +15924,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index d9395782a41..b150dd2cc62 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -15989,6 +15989,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 10ac7b4a494..372687e0cb8 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -9965,6 +9965,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/objects/simpleObject.kt"); } + @TestMetadata("substitutionFunctionFromSuper.kt") + public void testSubstitutionFunctionFromSuper() throws Exception { + runTest("compiler/testData/codegen/box/objects/substitutionFunctionFromSuper.kt"); + } + @TestMetadata("thisInConstructor.kt") public void testThisInConstructor() throws Exception { runTest("compiler/testData/codegen/box/objects/thisInConstructor.kt");