// RUN_PIPELINE_TILL: FRONTEND
// FIR_IDENTICAL
// WITH_STDLIB
// DIAGNOSTICS: -DEBUG_INFO_SMARTCAST
// LANGUAGE: +CustomEqualsInValueClasses

@JvmInline
value class IC1(val x: Int) {
    override fun <!INEFFICIENT_EQUALS_OVERRIDING_IN_VALUE_CLASS!>equals<!>(other: Any?): Boolean {
        if (other !is IC1) {
            return false
        }
        return x == other.x
    }
}

@JvmInline
value class IC2(val x: Int) {
    override fun hashCode() = 0
}

@JvmInline
value class IC3(val x: Int) {
    override fun equals(other: Any?) = true

    operator fun equals(other: IC3) = true

    override fun hashCode() = 0
}

@JvmInline
value class IC4<T>(val x: Int) {
    override fun equals(other: Any?) = true

    fun equals(other: <!TYPE_ARGUMENT_ON_TYPED_VALUE_CLASS_EQUALS!>IC4<T><!>) = true

    override fun hashCode() = 0
}

/* GENERATED_FIR_TAGS: classDeclaration, equalityExpression, functionDeclaration, ifExpression, integerLiteral,
isExpression, nullableType, operator, override, primaryConstructor, propertyDeclaration, smartcast, typeParameter, value */
