// RUN_PIPELINE_TILL: BACKEND
// DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER

class A {
    companion object {
        fun foo(): Int = 0
    }
}

fun A.foo(): Double = 0.0
fun Any.foo(): Float = 1f

class B {
    fun foo(): String = ""

    companion object {
        fun foo(): Int = 0
    }
}

fun B.<!EXTENSION_SHADOWED_BY_MEMBER!>foo<!>(): Double = 0.0

fun call(a: Any) {}

fun testA(a: A) {
    call(<!COMPATIBILITY_WARNING!>A::foo<!>)
    call(A.Companion::foo)
}

fun testB(b: B) {
    call(B::foo)
    call(B()::foo)
    call(B.Companion::foo)
}

/* GENERATED_FIR_TAGS: callableReference, classDeclaration, companionObject, funWithExtensionReceiver,
functionDeclaration, integerLiteral, objectDeclaration, stringLiteral */
