From 534beb8553c6e99360c7a6e41153754561a300c4 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Wed, 27 Oct 2021 00:21:31 +0300 Subject: [PATCH] IR: Test for toSkip(this) in T.resolveFakeOverride() ^KT-49371 Fixed --- .../FirBlackBoxCodegenTestGenerated.java | 6 +++++ .../kotlin/ir/util/IrFakeOverrideUtils.kt | 2 +- .../codegen/box/fakeOverride/kt49371.kt | 23 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ .../IrJsCodegenBoxES6TestGenerated.java | 5 ++++ .../IrJsCodegenBoxTestGenerated.java | 5 ++++ .../IrCodegenBoxWasmTestGenerated.java | 5 ++++ .../js/testNew/JsCodegenBoxTestGenerated.java | 6 +++++ 10 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/fakeOverride/kt49371.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index ae88e4e73ae..e7ce70fcedc 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -16078,6 +16078,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @Test + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @Test @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt index a2ce8b05613..2a2d96cc400 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrFakeOverrideUtils.kt @@ -98,7 +98,7 @@ fun > T.resolveFakeOverride( allowAbstract: Boolean = false, toSkip: (T) -> Boolean = { false } ): T? { - if (!isFakeOverride) return this + if (!isFakeOverride && !toSkip(this)) return this return if (allowAbstract) { val reals = collectRealOverrides(toSkip) if (reals.isEmpty()) error("No real overrides for ${this.render()}") diff --git a/compiler/testData/codegen/box/fakeOverride/kt49371.kt b/compiler/testData/codegen/box/fakeOverride/kt49371.kt new file mode 100644 index 00000000000..436afd3eaaa --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/kt49371.kt @@ -0,0 +1,23 @@ +interface Left +interface Right +class Bottom : Left, Right + +interface A { + fun f(): T? { + return null + } +} + +interface B : A {} + +abstract class C : A + +abstract class D : C() + +class Z : D(), B + + +fun box(): String { + Z().f() + return "OK" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index d461bdea607..636e6a17753 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -16000,6 +16000,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @Test + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @Test @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 549fbc6a74e..d1bd575bb85 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -16078,6 +16078,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @Test + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @Test @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 45b2e7af29e..7e1d97f860b 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13173,6 +13173,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception { runTest("compiler/testData/codegen/box/fakeOverride/privateFakeOverrides0.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 50d90d420a2..572584b8c91 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 @@ -11672,6 +11672,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception { runTest("compiler/testData/codegen/box/fakeOverride/privateFakeOverrides0.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 59d5e1cad07..f8b7b17d4f5 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 @@ -11078,6 +11078,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception { runTest("compiler/testData/codegen/box/fakeOverride/privateFakeOverrides0.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 09b122f8087..dc5b9da3430 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 @@ -10339,6 +10339,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception { runTest("compiler/testData/codegen/box/fakeOverride/privateFakeOverrides0.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenBoxTestGenerated.java index 4451daea8f8..b5825de059f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenBoxTestGenerated.java @@ -12468,6 +12468,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/fakeOverride/internalFromFriendModule.kt"); } + @Test + @TestMetadata("kt49371.kt") + public void testKt49371() throws Exception { + runTest("compiler/testData/codegen/box/fakeOverride/kt49371.kt"); + } + @Test @TestMetadata("privateFakeOverrides0.kt") public void testPrivateFakeOverrides0() throws Exception {