Files
kotlin-fork/compiler/testData/codegen/bytecodeListing/collectionStubs/inheritingFromAbstractMutableList.txt
T
Alexander Udalov e079fb665e 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
2021-05-12 13:58:40 +02:00

32 lines
1.5 KiB
Plaintext
Vendored

@kotlin.Metadata
public abstract class AMListD {
// source: 'inheritingFromAbstractMutableList.kt'
public method <init>(): void
public bridge method contains(p0: double): boolean
public bridge final method contains(p0: java.lang.Object): boolean
public bridge method indexOf(p0: double): int
public bridge final method indexOf(p0: java.lang.Object): int
public bridge method lastIndexOf(p0: double): int
public bridge final method lastIndexOf(p0: java.lang.Object): int
public bridge method remove(p0: double): boolean
public bridge final method remove(p0: int): double
public bridge final method remove(p0: java.lang.Object): boolean
public synthetic bridge method removeAt(p0: int): java.lang.Object
}
@kotlin.Metadata
public abstract class AMListI {
// source: 'inheritingFromAbstractMutableList.kt'
public method <init>(): void
public bridge method contains(p0: int): boolean
public bridge final method contains(p0: java.lang.Object): boolean
public bridge method indexOf(p0: int): int
public bridge final method indexOf(p0: java.lang.Object): int
public bridge method lastIndexOf(p0: int): int
public bridge final method lastIndexOf(p0: java.lang.Object): int
public bridge final method remove(p0: int): int
public bridge method remove(p0: java.lang.Integer): boolean
public bridge final method remove(p0: java.lang.Object): boolean
public synthetic bridge method removeAt(p0: int): java.lang.Object
}