JVM IR: fix inheritance from mutable collections of Int

For subclasses of `AbstractMutableList<Int>` which are not inline
classes, the special bridge `remove` had a parameter of type `Int`
(mapped to JVM primitive int) before this fix. The hack in
`MethodSignatureMapper` changed this type to `Int?`, yet the body of the
special bridge still loaded it as non-nullable, which resulted in
incorrect bytecode.

It looks like a part of this hack in `BridgeLowering` was made only for
inline classes which are subclasses of mutable collections. Supposedly
it should be extended to non-inline classes, so that `remove` special
bridge would have consistent IR by the time it reaches codegen.

 #KT-46516 Fixed
This commit is contained in:
Alexander Udalov
2021-05-06 20:41:22 +02:00
parent f30980806f
commit e079fb665e
13 changed files with 113 additions and 10 deletions
@@ -5246,6 +5246,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/collections/inSetWithSmartCast.kt");
}
@TestMetadata("inheritFromAbstractMutableListInt.kt")
public void testInheritFromAbstractMutableListInt() throws Exception {
runTest("compiler/testData/codegen/box/collections/inheritFromAbstractMutableListInt.kt");
}
@TestMetadata("inheritFromHashtable.kt")
public void testInheritFromHashtable() throws Exception {
runTest("compiler/testData/codegen/box/collections/inheritFromHashtable.kt");