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 4963404afdd..2a1f9d5ef54 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 @@ -5013,6 +5013,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/collections/irrelevantSizeOverrideInJava.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/box/collections/kt41123.kt"); + } + @TestMetadata("mutableList.kt") public void testMutableList() throws Exception { runTest("compiler/testData/codegen/box/collections/mutableList.kt"); diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt index 21b94d9b032..5e44d7baca2 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt @@ -353,6 +353,9 @@ class MethodSignatureMapper(private val context: JvmBackendContext) { return null } + internal fun mapCalleeToAsmMethod(function: IrSimpleFunction, isSuperCall: Boolean = false): Method = + mapAsmMethod(findSuperDeclaration(function, isSuperCall)) + // Copied from KotlinTypeMapper.findSuperDeclaration. private fun findSuperDeclaration(function: IrSimpleFunction, isSuperCall: Boolean): IrSimpleFunction { var current = function 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 d6d58556413..dd15324346f 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 @@ -357,11 +357,13 @@ internal class BridgeLowering(val context: JvmBackendContext) : FileLoweringPass } // List of special bridge methods which were not implemented in Kotlin superclasses. - private fun IrSimpleFunction.overriddenSpecialBridges(): List = allOverridden().mapNotNull { - if (it.parentAsClass.isInterface || it.comesFromJava()) - it.specialBridgeOrNull?.takeIf { bridge -> bridge.signature != jvmMethod } - ?.copy(isFinal = false, isSynthetic = true, methodInfo = null) - else null + private fun IrSimpleFunction.overriddenSpecialBridges(): List { + val targetJvmMethod = context.methodSignatureMapper.mapCalleeToAsmMethod(this) + return allOverridden() + .filter { it.parentAsClass.isInterface || it.comesFromJava() } + .mapNotNull { it.specialBridgeOrNull } + .filter { it.signature != targetJvmMethod } + .map { it.copy(isFinal = false, isSynthetic = true, methodInfo = null) } } private fun IrClass.addAbstractMethodStub(irFunction: IrSimpleFunction, needsArgumentBoxing: Boolean) = diff --git a/compiler/testData/codegen/box/collections/kt41123.kt b/compiler/testData/codegen/box/collections/kt41123.kt new file mode 100644 index 00000000000..e09d4b71100 --- /dev/null +++ b/compiler/testData/codegen/box/collections/kt41123.kt @@ -0,0 +1,11 @@ +// WITH_RUNTIME +// KJS_WITH_FULL_RUNTIME +// IGNORE_BACKEND_FIR: JVM_IR + +open class A : HashMap() + +fun box(): String { + val a = object : A() {} + a["OK"] = "OK" + return a["OK"]!! +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase_ir.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase_ir.txt deleted file mode 100644 index b4bf1608789..00000000000 --- a/compiler/testData/codegen/bytecodeListing/specialBridges/abstractListsWithJavaBase_ir.txt +++ /dev/null @@ -1,105 +0,0 @@ -@kotlin.Metadata -public abstract class AJALA { - // source: 'abstractListsWithJavaBase.kt' - public method (): void - public abstract method getSize(): int - public bridge final method remove(p0: int): java.lang.Object - public bridge method removeAt(p0: int): java.lang.Object - public bridge final method size(): int -} - -@kotlin.Metadata -public abstract class AJALAN { - // source: 'abstractListsWithJavaBase.kt' - public method (): void - public abstract method getSize(): int - public bridge final method remove(p0: int): java.lang.Object - public bridge method removeAt(p0: int): java.lang.Object - public bridge final method size(): int -} - -@kotlin.Metadata -public abstract class AJALI { - // source: 'abstractListsWithJavaBase.kt' - public method (): void - public bridge method contains(p0: java.lang.Integer): boolean - public bridge final method contains(p0: java.lang.Object): boolean - public abstract method getSize(): int - public bridge method indexOf(p0: java.lang.Integer): int - public bridge final method indexOf(p0: java.lang.Object): int - public bridge method lastIndexOf(p0: java.lang.Integer): int - public bridge final method lastIndexOf(p0: java.lang.Object): int - public bridge final method remove(p0: int): java.lang.Integer - public synthetic bridge method remove(p0: int): java.lang.Object - public bridge method remove(p0: java.lang.Integer): boolean - public bridge final method remove(p0: java.lang.Object): boolean - public bridge method removeAt(p0: int): java.lang.Integer - public bridge final method size(): int -} - -@kotlin.Metadata -public abstract class AJALIN { - // source: 'abstractListsWithJavaBase.kt' - public method (): void - public bridge method contains(p0: java.lang.Integer): boolean - public bridge final method contains(p0: java.lang.Object): boolean - public abstract method getSize(): int - public bridge method indexOf(p0: java.lang.Integer): int - public bridge final method indexOf(p0: java.lang.Object): int - public bridge method lastIndexOf(p0: java.lang.Integer): int - public bridge final method lastIndexOf(p0: java.lang.Object): int - public bridge final method remove(p0: int): java.lang.Integer - public synthetic bridge method remove(p0: int): java.lang.Object - public bridge method remove(p0: java.lang.Integer): boolean - public bridge final method remove(p0: java.lang.Object): boolean - public bridge method removeAt(p0: int): java.lang.Integer - public bridge final method size(): int -} - -@kotlin.Metadata -public abstract class AJALS { - // source: 'abstractListsWithJavaBase.kt' - public method (): void - public bridge final method contains(p0: java.lang.Object): boolean - public bridge method contains(p0: java.lang.String): boolean - public abstract method getSize(): int - public bridge final method indexOf(p0: java.lang.Object): int - public bridge method indexOf(p0: java.lang.String): int - public bridge final method lastIndexOf(p0: java.lang.Object): int - public bridge method lastIndexOf(p0: java.lang.String): int - public synthetic bridge method remove(p0: int): java.lang.Object - public bridge final method remove(p0: int): java.lang.String - public bridge final method remove(p0: java.lang.Object): boolean - public bridge method remove(p0: java.lang.String): boolean - public bridge method removeAt(p0: int): java.lang.String - public bridge final method size(): int -} - -@kotlin.Metadata -public abstract class AJALSN { - // source: 'abstractListsWithJavaBase.kt' - public method (): void - public bridge final method contains(p0: java.lang.Object): boolean - public bridge method contains(p0: java.lang.String): boolean - public abstract method getSize(): int - public bridge final method indexOf(p0: java.lang.Object): int - public bridge method indexOf(p0: java.lang.String): int - public bridge final method lastIndexOf(p0: java.lang.Object): int - public bridge method lastIndexOf(p0: java.lang.String): int - public synthetic bridge method remove(p0: int): java.lang.Object - public bridge final method remove(p0: int): java.lang.String - public bridge final method remove(p0: java.lang.Object): boolean - public bridge method remove(p0: java.lang.String): boolean - public bridge method removeAt(p0: int): java.lang.String - public bridge final method size(): int -} - -@kotlin.Metadata -public abstract class AJALT { - // source: 'abstractListsWithJavaBase.kt' - public method (): void - public abstract method getSize(): int - public bridge final method remove(p0: int): java.lang.Object - public bridge method removeAt(p0: int): java.lang.Object - public bridge final method size(): int -} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/contains_ir.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/contains_ir.txt index f8f8427bedd..6e7f671ff1f 100644 --- a/compiler/testData/codegen/bytecodeListing/specialBridges/contains_ir.txt +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/contains_ir.txt @@ -58,7 +58,6 @@ public abstract class A5 { public bridge method indexOf(p0: java.lang.String): int public bridge final method lastIndexOf(p0: java.lang.Object): int public bridge method lastIndexOf(p0: java.lang.String): int - public synthetic bridge method remove(p0: int): java.lang.Object public bridge final method remove(p0: int): java.lang.String public bridge final method remove(p0: java.lang.Object): boolean public bridge method remove(p0: java.lang.String): boolean @@ -78,7 +77,6 @@ public abstract class A6 { public bridge method indexOf(p0: java.lang.String): int public bridge final method lastIndexOf(p0: java.lang.Object): int public bridge method lastIndexOf(p0: java.lang.String): int - public synthetic bridge method remove(p0: int): java.lang.Object public bridge final method remove(p0: int): java.lang.String public bridge final method remove(p0: java.lang.Object): boolean public bridge method remove(p0: java.lang.String): boolean diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.kt b/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.kt new file mode 100644 index 00000000000..594f39f51e3 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.kt @@ -0,0 +1,13 @@ +// WITH_RUNTIME + +// TODO KT-42391 +// JVM: +// public bridge final method get(p0: java.lang.Object): java.lang.Object +// public bridge final method remove(p0: java.lang.Object): java.lang.Object +// JVM_IR: +// public bridge final method get(p0: java.lang.Object): java.lang.String +// public bridge final method remove(p0: java.lang.Object): java.lang.String + +open class A : HashMap() + +class B : A() \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.txt new file mode 100644 index 00000000000..f6b9d341d12 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.txt @@ -0,0 +1,27 @@ +@kotlin.Metadata +public class A { + // source: 'kt41123.kt' + public method (): void + public bridge final method containsKey(p0: java.lang.Object): boolean + public bridge method containsKey(p0: java.lang.String): boolean + public bridge final method containsValue(p0: java.lang.Object): boolean + public bridge method containsValue(p0: java.lang.String): boolean + public bridge final method entrySet(): java.util.Set + public bridge final method get(p0: java.lang.Object): java.lang.Object + public bridge method get(p0: java.lang.String): java.lang.String + public bridge method getEntries(): java.util.Set + public bridge method getKeys(): java.util.Set + public bridge method getSize(): int + public bridge method getValues(): java.util.Collection + public bridge final method keySet(): java.util.Set + public bridge final method remove(p0: java.lang.Object): java.lang.Object + public bridge method remove(p0: java.lang.String): java.lang.String + public bridge final method size(): int + public bridge final method values(): java.util.Collection +} + +@kotlin.Metadata +public final class B { + // source: 'kt41123.kt' + public method (): void +} diff --git a/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123_ir.txt b/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123_ir.txt new file mode 100644 index 00000000000..b84f5bfbf91 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/specialBridges/kt41123_ir.txt @@ -0,0 +1,27 @@ +@kotlin.Metadata +public class A { + // source: 'kt41123.kt' + public method (): void + public bridge final method containsKey(p0: java.lang.Object): boolean + public bridge method containsKey(p0: java.lang.String): boolean + public bridge final method containsValue(p0: java.lang.Object): boolean + public bridge method containsValue(p0: java.lang.String): boolean + public bridge final method entrySet(): java.util.Set + public bridge final method get(p0: java.lang.Object): java.lang.String + public bridge method get(p0: java.lang.String): java.lang.String + public bridge method getEntries(): java.util.Set + public bridge method getKeys(): java.util.Set + public bridge method getSize(): int + public bridge method getValues(): java.util.Collection + public bridge final method keySet(): java.util.Set + public bridge final method remove(p0: java.lang.Object): java.lang.String + public bridge method remove(p0: java.lang.String): java.lang.String + public bridge final method size(): int + public bridge final method values(): java.util.Collection +} + +@kotlin.Metadata +public final class B { + // source: 'kt41123.kt' + public method (): void +} diff --git a/compiler/testData/codegen/bytecodeText/builtinFunctions/removeAt.kt b/compiler/testData/codegen/bytecodeText/builtinFunctions/removeAt.kt index d084bbd4046..c36688ce7a5 100644 --- a/compiler/testData/codegen/bytecodeText/builtinFunctions/removeAt.kt +++ b/compiler/testData/codegen/bytecodeText/builtinFunctions/removeAt.kt @@ -1,3 +1,5 @@ +// IGNORE_BACKEND_FIR: JVM_IR + abstract class A1 : MutableList { override fun remove(x: T): Boolean = true override fun removeAt(index: Int): T = null!! @@ -99,8 +101,8 @@ On the JVM backend we have: 1 INVOKEVIRTUAL A10\.remove \(I\) -> one call in 'box' function On the JVM IR backend we have: -9 INVOKEVIRTUAL A[0-9]+.removeAt \(I\) -> calls in non-synthetic bridges with signature `public final bridge remove(I)` -17 INVOKEVIRTUAL A[0-9]+\.remove \(I\) -> calls to A1-A9.removeAt + calls in synthetic bridges with signature `public synthetic bridge remove(I)Ljava/lang/Object;` +10 INVOKEVIRTUAL A[0-9]+.removeAt \(I\) -> calls in bridges with signature `public final bridge remove(I)` +15 INVOKEVIRTUAL A[0-9]+\.remove \(I\) -> calls to A1-A9.removeAt + calls in synthetic bridges with signature `public synthetic bridge remove(I)Ljava/lang/Object;` 2 INVOKEVIRTUAL A10\.remove \(I\) -> one call in 'box' function + call from synthetic `remove(I)` bridge This currently differs because of KT-40277, and the test expectations should be revised once KT-40277 is resolved. @@ -117,6 +119,21 @@ This currently differs because of KT-40277, and the test expectations should be // 1 INVOKEVIRTUAL A10\.remove \(I\) // JVM_IR_TEMPLATES: -// 9 INVOKEVIRTUAL A[0-9]+.removeAt \(I\) -// 17 INVOKEVIRTUAL A[0-9]+\.remove \(I\) +// 1 INVOKEVIRTUAL A1\.removeAt \(I\) +// 1 INVOKEVIRTUAL A2\.removeAt \(I\) +// 1 INVOKEVIRTUAL A3\.removeAt \(I\) +// 1 INVOKEVIRTUAL A4\.removeAt \(I\) +// 1 INVOKEVIRTUAL A5\.removeAt \(I\) +// 1 INVOKEVIRTUAL A6\.removeAt \(I\) +// 1 INVOKEVIRTUAL A8\.removeAt \(I\) +// 1 INVOKEVIRTUAL A10\.removeAt \(I\) + +// 2 INVOKEVIRTUAL A7\.removeAt \(I\) +// ^ in: +// public final bridge remove(I)Ljava/lang/String; +// public synthetic bridge remove(I)Ljava/lang/Object; + +// 10 INVOKEVIRTUAL A[0-9]+\.removeAt \(I\) + +// 15 INVOKEVIRTUAL A[0-9]+\.remove \(I\) // 2 INVOKEVIRTUAL A10\.remove \(I\) diff --git a/compiler/testData/codegen/bytecodeText/mapGetOrDefault.kt b/compiler/testData/codegen/bytecodeText/mapGetOrDefault.kt index ca5304a938a..c8eff9871ee 100644 --- a/compiler/testData/codegen/bytecodeText/mapGetOrDefault.kt +++ b/compiler/testData/codegen/bytecodeText/mapGetOrDefault.kt @@ -37,5 +37,5 @@ class MyMap: TestMap() // 1 public final bridge getOrDefault\(Ljava/lang/Object;Ljava/lang/Object;\)Ljava/lang/Object; // JVM_IR_TEMPLATES: -// 1 public final bridge getOrDefault\(Ljava/lang/Object;Ljava/lang/String;\)Ljava/lang/String; -// 1 public synthetic bridge getOrDefault\(Ljava/lang/Object;Ljava/lang/Object;\)Ljava/lang/Object; \ No newline at end of file +// 1 public bridge getOrDefault\(Ljava/lang/String;Ljava/lang/String;\)Ljava/lang/String; +// 1 public final bridge getOrDefault\(Ljava/lang/Object;Ljava/lang/String;\)Ljava/lang/String; \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index f8590c8bdce..eda85ca9843 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -5043,6 +5043,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/collections/irrelevantSizeOverrideInJava.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/box/collections/kt41123.kt"); + } + @TestMetadata("mutableList.kt") public void testMutableList() throws Exception { runTest("compiler/testData/codegen/box/collections/mutableList.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index c0091628a8e..213e7853872 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -948,6 +948,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/specialBridges/contains.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.kt"); + } + @TestMetadata("noDefaultImplsOnEmptySubInterface.kt") public void testNoDefaultImplsOnEmptySubInterface() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/specialBridges/noDefaultImplsOnEmptySubInterface.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 9c124a90170..631e22f8bd2 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -5043,6 +5043,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/collections/irrelevantSizeOverrideInJava.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/box/collections/kt41123.kt"); + } + @TestMetadata("mutableList.kt") public void testMutableList() throws Exception { runTest("compiler/testData/codegen/box/collections/mutableList.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 817f14e9310..2835a91a286 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -5013,6 +5013,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/collections/irrelevantSizeOverrideInJava.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/box/collections/kt41123.kt"); + } + @TestMetadata("mutableList.kt") public void testMutableList() throws Exception { runTest("compiler/testData/codegen/box/collections/mutableList.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index 14fd0d44c58..005de8ed6aa 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -918,6 +918,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/specialBridges/contains.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/specialBridges/kt41123.kt"); + } + @TestMetadata("noDefaultImplsOnEmptySubInterface.kt") public void testNoDefaultImplsOnEmptySubInterface() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/specialBridges/noDefaultImplsOnEmptySubInterface.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 61449d23d54..764bfee8b2b 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 @@ -4088,6 +4088,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/collections/inSetWithSmartCast.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/box/collections/kt41123.kt"); + } + @TestMetadata("removeClash.kt") public void testRemoveClash() throws Exception { runTest("compiler/testData/codegen/box/collections/removeClash.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 99aac50de71..b92e53a71a7 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 @@ -4088,6 +4088,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/collections/inSetWithSmartCast.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/box/collections/kt41123.kt"); + } + @TestMetadata("removeClash.kt") public void testRemoveClash() throws Exception { runTest("compiler/testData/codegen/box/collections/removeClash.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 b5a96bd1e9d..4aa5e187495 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 @@ -4088,6 +4088,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/collections/inSetWithSmartCast.kt"); } + @TestMetadata("kt41123.kt") + public void testKt41123() throws Exception { + runTest("compiler/testData/codegen/box/collections/kt41123.kt"); + } + @TestMetadata("removeClash.kt") public void testRemoveClash() throws Exception { runTest("compiler/testData/codegen/box/collections/removeClash.kt");