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 d8d95005c45..daf73834832 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 @@ -1522,6 +1522,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt index 97abfba815c..32cedb790c0 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt @@ -350,9 +350,12 @@ internal class BridgeLowering(val context: JvmBackendContext) : FileLoweringPass // // This can still break binary compatibility, but it matches the behavior of the JVM backend. if (irFunction.isFakeOverride) { - irFunction.overriddenSymbols.asSequence().map { it.owner }.filter { !it.isJvmAbstract(context.state.jvmDefaultMode) } + irFunction.overriddenSymbols.asSequence() + .map { it.owner }.filter { !it.isJvmAbstract(context.state.jvmDefaultMode) } .forEach { override -> - override.allOverridden().mapTo(blacklist) { it.jvmMethod } + override.allOverridden() + .filter { !it.isFakeOverride } + .mapTo(blacklist) { it.jvmMethod } } } diff --git a/compiler/testData/codegen/box/bridges/kt42137.kt b/compiler/testData/codegen/box/bridges/kt42137.kt new file mode 100644 index 00000000000..5c806317dcd --- /dev/null +++ b/compiler/testData/codegen/box/bridges/kt42137.kt @@ -0,0 +1,16 @@ +interface A { + val value: T +} + +interface B : A + +open class C(override val value: String) : B + +interface X { + val value: CharSequence +} + +class Y(value: String) : C(value), X + +fun box(): String = + (Y("OK") as X).value.toString() diff --git a/compiler/testData/codegen/bytecodeListing/kt42137.kt b/compiler/testData/codegen/bytecodeListing/kt42137.kt new file mode 100644 index 00000000000..cd2241255e8 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/kt42137.kt @@ -0,0 +1,13 @@ +interface A { + val value: T +} + +interface B : A + +open class C(override val value: String) : B + +interface X { + val value: CharSequence +} + +class Y(value: String) : C(value), X diff --git a/compiler/testData/codegen/bytecodeListing/kt42137.txt b/compiler/testData/codegen/bytecodeListing/kt42137.txt new file mode 100644 index 00000000000..cffc874c371 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/kt42137.txt @@ -0,0 +1,32 @@ +@kotlin.Metadata +public interface A { + // source: 'kt42137.kt' + public abstract method getValue(): java.lang.Object +} + +@kotlin.Metadata +public interface B { + // source: 'kt42137.kt' +} + +@kotlin.Metadata +public class C { + // source: 'kt42137.kt' + private final @org.jetbrains.annotations.NotNull field value: java.lang.String + public method (@org.jetbrains.annotations.NotNull p0: java.lang.String): void + public synthetic bridge method getValue(): java.lang.Object + public @org.jetbrains.annotations.NotNull method getValue(): java.lang.String +} + +@kotlin.Metadata +public interface X { + // source: 'kt42137.kt' + public abstract @org.jetbrains.annotations.NotNull method getValue(): java.lang.CharSequence +} + +@kotlin.Metadata +public final class Y { + // source: 'kt42137.kt' + public method (@org.jetbrains.annotations.NotNull p0: java.lang.String): void + public synthetic bridge method getValue(): java.lang.CharSequence +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index cf272f439bf..b6534f4bc81 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -1542,6 +1542,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index c9b7ee50c2f..9509566f674 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -104,6 +104,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/jvmStaticWithDefaultParameters.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/kt42137.kt"); + } + @TestMetadata("kt42879.kt") public void testKt42879() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/kt42879.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 54557305203..d0abf9223c2 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -1542,6 +1542,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index dbd4c719cbc..cdc910a9b09 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -1522,6 +1522,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index dd59218b592..b7edbcea4a3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -104,6 +104,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/jvmStaticWithDefaultParameters.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/kt42137.kt"); + } + @TestMetadata("kt42879.kt") public void testKt42879() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/kt42879.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 186b2ee5c47..1703e540fad 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 @@ -1137,6 +1137,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.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 a048e4df518..b0b98c267bb 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 @@ -1137,6 +1137,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.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 717af2f9742..8bb37096b37 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 @@ -1137,6 +1137,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index ddd4a2aa919..3c133b10458 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -977,6 +977,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/bridges/kt318.kt"); } + @TestMetadata("kt42137.kt") + public void testKt42137() throws Exception { + runTest("compiler/testData/codegen/box/bridges/kt42137.kt"); + } + @TestMetadata("longChainOneBridge.kt") public void testLongChainOneBridge() throws Exception { runTest("compiler/testData/codegen/box/bridges/longChainOneBridge.kt");