// WITH_STDLIB // LANGUAGE: +ValueClasses, +CustomEqualsInValueClasses // TARGET_BACKEND: JVM_IR // CHECK_BYTECODE_LISTING var counter = 0 @JvmInline value class MFVC(val x: Int, val y: Int) { fun equals(other: MFVC): Boolean { counter++ return x == other.x && this.y == other.y } override fun equals(other: Any?): Boolean { counter++ if (other !is MFVC) { return false } return equals(other) } override fun hashCode(): Int { counter++ return x + 13 * y } } fun box(): String { val mfvc1 = MFVC(1, 2) val mfvc2 = MFVC(3, 4) require(mfvc1.equals(mfvc1)) require(!mfvc1.equals(mfvc2)) require(!mfvc2.equals(mfvc1)) require(mfvc2.equals(mfvc2)) require(mfvc1.equals(mfvc1 as Any?)) require(!mfvc1.equals(mfvc2 as Any?)) require(!mfvc2.equals(mfvc1 as Any?)) require(mfvc2.equals(mfvc2 as Any?)) require(mfvc1.hashCode() == 27) require(mfvc2.hashCode() == 55) require(counter == 4 + 2 * 4 + 2) return "OK" }