[IR] Implement equals call correct generation for MFVC

#KT-1179
This commit is contained in:
Evgeniy.Zhelenskiy
2022-04-29 23:38:12 +03:00
committed by teamcity
parent ee2d327243
commit 73b0fac657
4 changed files with 159 additions and 14 deletions
+23 -3
View File
@@ -1,3 +1,5 @@
// IGNORE_BACKEND_FIR: JVM_IR
// https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir
// CHECK_BYTECODE_LISTING
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
@@ -40,7 +42,7 @@ interface Base3 {
}
@JvmInline
value class R<T : Any>(val x: Int, val y: UInt, override val z: E, val t: A<T>): Base1, Base3
value class R<T : Any>(val x: Int, val y: UInt, override val z: E, val t: A<T>) : Base1, Base3
fun <T : List<Int>> f(r: R<T>) {
println(r)
@@ -89,14 +91,16 @@ interface Base1 {
val fakeOverrideRegular: Int
get() = TODO()
}
interface Base2 {
var l: R<List<Int>>
}
interface Base4<T> {
var l: T
}
class NotInlined(override var l: R<List<Int>>, var y: Int): Base1, Base2, Base4<R<List<Int>>> {
class NotInlined(override var l: R<List<Int>>, var y: Int) : Base1, Base2, Base4<R<List<Int>>> {
override fun toString(): String = l.toString() + l.z.x.x.z
init {
@@ -150,6 +154,22 @@ fun reuseBoxed(list: MutableList<R<List<Int>>>) {
list.add(list.last())
}
fun supply(x: Boolean) {}
fun equalsChecks(left: R<List<Int>>, right: R<List<Int>>) {
supply(left == right)
supply(left as Any == right)
supply(left == right as Any)
supply(left as Any == right as Any)
supply(null == right)
supply(left == null)
supply(null as Any? == right)
supply(null as R<List<Int>>? == right)
supply(left == null as Any?)
supply(left == null as R<List<Int>>?)
supply(left as R<List<Int>>? == right)
supply(left == right as R<List<Int>>?)
}
// todo add default parameters
fun box() = "bad"//.also { h(R(1, 2U, E(D(C(3, B(4U), "5"))), A(listOf(listOf(6))))) }
fun box() = "OK"//.also { h(R(1, 2U, E(D(C(3, B(4U), "5"))), A(listOf(listOf(6))))) }
+81 -3
View File
@@ -36,6 +36,42 @@ public final class B {
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class Base1$DefaultImpls {
// source: 'simple.kt'
public static @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(@org.jetbrains.annotations.NotNull p0: Base1): R
public static method getFakeOverrideRegular(@org.jetbrains.annotations.NotNull p0: Base1): int
public final inner class Base1$DefaultImpls
}
@kotlin.Metadata
public interface Base1 {
// source: 'simple.kt'
public abstract @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(): R
public abstract method getFakeOverrideRegular(): int
public final inner class Base1$DefaultImpls
}
@kotlin.Metadata
public interface Base2 {
// source: 'simple.kt'
public abstract @org.jetbrains.annotations.NotNull method getL(): R
public abstract method setL-Y_3tvh0(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
}
@kotlin.Metadata
public interface Base3 {
// source: 'simple.kt'
public abstract @org.jetbrains.annotations.NotNull method getZ(): E
}
@kotlin.Metadata
public interface Base4 {
// source: 'simple.kt'
public abstract method getL(): java.lang.Object
public abstract method setL(p0: java.lang.Object): void
}
@kotlin.jvm.JvmInline
@kotlin.Metadata
public final class C {
@@ -46,12 +82,15 @@ public final class C {
private synthetic method <init>(p0: int, p1: int, p2: java.lang.String): void
public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String): C
public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): boolean
public final method getX(): int
public final method getY(): int
public final @org.jetbrains.annotations.NotNull method getZ(): java.lang.String
public method hashCode(): int
public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String): int
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
public static method toString-impl(p0: int, p1: int, p2: java.lang.String): java.lang.String
public synthetic final method unbox-impl0(): int
public synthetic final method unbox-impl1(): int
@@ -69,13 +108,16 @@ public final class D {
public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String): D
public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
public final static @org.jetbrains.annotations.NotNull method constructor-impl(p0: int, p1: int, p2: int): D
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): boolean
public final method getX$x(): int
public final method getX$y(): int
public final @org.jetbrains.annotations.NotNull method getX$z(): java.lang.String
public final @org.jetbrains.annotations.NotNull method getX(): C
public method hashCode(): int
public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String): int
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
public static method toString-impl(p0: int, p1: int, p2: java.lang.String): java.lang.String
public synthetic final method unbox-impl0(): int
public synthetic final method unbox-impl1(): int
@@ -92,14 +134,19 @@ public final class E {
private synthetic method <init>(p0: int, p1: int, p2: java.lang.String): void
public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String): E
public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): boolean
public final static @org.jetbrains.annotations.NotNull method getWithNonTrivialSetters-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): D
public final method getX$x$x(): int
public final method getX$x$y(): int
public final @org.jetbrains.annotations.NotNull method getX$x$z(): java.lang.String
public final @org.jetbrains.annotations.NotNull method getX$x(): C
public final @org.jetbrains.annotations.NotNull method getX(): D
public method hashCode(): int
public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String): int
public final static method setWithNonTrivialSetters-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String, p3: int, p4: int, @org.jetbrains.annotations.NotNull p5: java.lang.String): void
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
public static method toString-impl(p0: int, p1: int, p2: java.lang.String): java.lang.String
public synthetic final method unbox-impl0(): int
public synthetic final method unbox-impl1(): int
@@ -115,9 +162,23 @@ public final class NotInlined {
private field l$z$x$x$x: int
private field l$z$x$x$y: int
private @org.jetbrains.annotations.NotNull field l$z$x$x$z: java.lang.String
private @org.jetbrains.annotations.NotNull field withNonTrivialGettersWithBF$t: java.util.List
private field withNonTrivialGettersWithBF$y: int
private field withNonTrivialGettersWithBF$z$x$x$x$1: int
private field withNonTrivialGettersWithBF$z$x$x$x: int
private field withNonTrivialGettersWithBF$z$x$x$y: int
private @org.jetbrains.annotations.NotNull field withNonTrivialGettersWithBF$z$x$x$z: java.lang.String
private @org.jetbrains.annotations.NotNull field withNonTrivialSettersWithBF$t: java.util.List
private field withNonTrivialSettersWithBF$y: int
private field withNonTrivialSettersWithBF$z$x$x$x$1: int
private field withNonTrivialSettersWithBF$z$x$x$x: int
private field withNonTrivialSettersWithBF$z$x$x$y: int
private @org.jetbrains.annotations.NotNull field withNonTrivialSettersWithBF$z$x$x$z: java.lang.String
private field y: int
private method <init>(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: int): void
public synthetic method <init>(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: int, p7: kotlin.jvm.internal.DefaultConstructorMarker): void
public @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(): R
public method getFakeOverrideRegular(): int
public final @org.jetbrains.annotations.NotNull method getL$t(): java.util.List
public final method getL$y(): int
public final method getL$z$x$x$x(): int
@@ -126,9 +187,16 @@ public final class NotInlined {
public final @org.jetbrains.annotations.NotNull method getL$z$x$x(): C
public final @org.jetbrains.annotations.NotNull method getL$z$x(): D
public final @org.jetbrains.annotations.NotNull method getL$z(): E
public final @org.jetbrains.annotations.NotNull method getL(): R
public @org.jetbrains.annotations.NotNull method getL(): R
public synthetic bridge method getL(): java.lang.Object
public final @org.jetbrains.annotations.NotNull method getWithNonTrivialGettersWithBF(): R
public final @org.jetbrains.annotations.NotNull method getWithNonTrivialSetters(): R
public final @org.jetbrains.annotations.NotNull method getWithNonTrivialSettersWithBF(): R
public final method getY(): int
public final method setL-Y_3tvh0(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
public synthetic bridge method setL(p0: java.lang.Object): void
public method setL-Y_3tvh0(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
public final method setWithNonTrivialSetters-Y_3tvh0(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
public final method setWithNonTrivialSettersWithBF-Y_3tvh0(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
public final method setY(p0: int): void
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
public final method trySetter(): void
@@ -147,8 +215,13 @@ public final class R {
private synthetic method <init>(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): void
public synthetic final static method box-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): R
public final static method constructor-impl(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: int, p7: int, p8: int, p9: int, p10: java.lang.String, p11: java.util.List): boolean
public @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(): R
public static @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC-impl(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): R
public method getFakeOverrideRegular(): int
public static method getFakeOverrideRegular-impl(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): int
public final @org.jetbrains.annotations.NotNull method getT(): java.util.List
public final method getY(): int
public final method getZ$x$x$x(): int
@@ -157,7 +230,9 @@ public final class R {
public final @org.jetbrains.annotations.NotNull method getZ$x$x(): C
public final @org.jetbrains.annotations.NotNull method getZ$x(): D
public final @org.jetbrains.annotations.NotNull method getZ(): E
public method hashCode(): int
public static method hashCode-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): int
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
public static method toString-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): java.lang.String
public synthetic final method unbox-impl0(): int
public synthetic final method unbox-impl1(): int
@@ -171,11 +246,14 @@ public final class R {
public final class SimpleKt {
// source: 'simple.kt'
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
public final static method ekeke(@org.jetbrains.annotations.NotNull p0: NotInlined): void
public final static method equalsChecks-GPBa7dw-yJnZWq8(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List, p6: int, p7: int, p8: int, p9: int, @org.jetbrains.annotations.NotNull p10: java.lang.String, @org.jetbrains.annotations.NotNull p11: java.util.List): void
public final static method f-sUp7gFk-Y_3tvh0(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
public final static method g-sUp7gFk-ZTiL54U(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
public final static method h-sUp7gFk-Y_3tvh0(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
public final static method h1(): void
public final static @org.jetbrains.annotations.NotNull method inlined-OsBMiQA(p0: int, p1: int, p2: int): D
public final static @org.jetbrains.annotations.NotNull method notInlined-OsBMiQA(p0: int, p1: int, p2: int): D
public final static method reuseBoxed(@org.jetbrains.annotations.NotNull p0: java.util.List): void
public final static method supply(p0: boolean): void
public final static method testVars(@org.jetbrains.annotations.NotNull p0: NotInlined): void
}