// WITH_STDLIB // LANGUAGE: +ValueClasses, +CustomEqualsInValueClasses // TARGET_BACKEND: JVM_IR // CHECK_BYTECODE_LISTING interface I { fun getVal(): Int } @JvmInline value class IC1(val x: Int) : I { override fun getVal(): Int { return x } fun equals(other: IC1): Boolean { return x == other.x } override fun equals(other: Any?): Boolean { if (other !is I) { return false } return getVal() == other.getVal() } override fun hashCode(): Int { return getVal() } } @JvmInline value class IC2(val y: Int) : I { override fun getVal(): Int { return y * 10 } fun equals(other: IC2): Boolean { return y == other.y } override fun equals(other: Any?): Boolean { if (other !is I) { return false } return getVal() == other.getVal() } override fun hashCode(): Int { return getVal() } } fun box(): String = if (setOf(IC1(10), IC2(1)).size == 1) "OK" else "Fail"