Fix bytecode for equals/hashCode of data classes once again

#KT-24790 Fixed
This commit is contained in:
Alexander Udalov
2018-06-12 14:00:23 +02:00
parent 8749bd901b
commit 813d7fcb6a
9 changed files with 58 additions and 50 deletions
@@ -1,10 +0,0 @@
// IGNORE_BACKEND: JS_IR
interface A
data class B<out T : A>(val a: T)
fun box(): String {
val b1 = B(object : A {})
val b2 = B(object : A {})
return if (b1.equals(b2)) "Fail" else "OK"
}
@@ -0,0 +1,26 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
interface A
data class B<out T : A>(val a: T)
annotation class Anno
@Anno
data class C(val a: Anno)
fun box(): String {
val b1 = B(object : A {})
val b2 = B(object : A {})
if (b1.hashCode() == b2.hashCode()) return "Fail 1"
if (b1.equals(b2)) return "Fail 2"
val anno = C::class.java.annotations.first() as Anno
val c1 = C(anno)
val c2 = C(anno)
if (c1.hashCode() != c2.hashCode()) return "Fail 3"
if (!c1.equals(c2)) return "Fail 4"
return "OK"
}