Fix ambiguity on reference inside blocks of special functions
#KT-37058 Fixed
This commit is contained in:
+25
@@ -0,0 +1,25 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
interface A
|
||||
interface B
|
||||
|
||||
fun foo(a: A) {}
|
||||
fun foo(b: B) {}
|
||||
|
||||
fun bar(a: A) {}
|
||||
|
||||
val l0: (A) -> Unit
|
||||
get() =
|
||||
if (1 < 2) {
|
||||
::foo
|
||||
} else {
|
||||
::bar
|
||||
}
|
||||
|
||||
val l1: (A) -> Unit
|
||||
get() = when {
|
||||
true -> ::foo
|
||||
false -> { ::foo }
|
||||
else -> ::bar
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package
|
||||
|
||||
public val l0: (A) -> kotlin.Unit
|
||||
public val l1: (A) -> kotlin.Unit
|
||||
public fun bar(/*0*/ a: A): kotlin.Unit
|
||||
public fun foo(/*0*/ a: A): kotlin.Unit
|
||||
public fun foo(/*0*/ b: B): kotlin.Unit
|
||||
|
||||
public interface A {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface B {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
interface A
|
||||
interface B
|
||||
object C : A, B
|
||||
|
||||
fun foo(a: A): Int = 0
|
||||
fun foo(b: B): Double = 0.0
|
||||
|
||||
fun bar(a: A): Int = 0
|
||||
|
||||
val l0: Int
|
||||
get() =
|
||||
if (1 < 2) {
|
||||
<!AMBIGUITY!>foo<!>(C)
|
||||
} else {
|
||||
bar(C)
|
||||
}
|
||||
|
||||
val l1: Int
|
||||
get() = when {
|
||||
true -> <!AMBIGUITY!>foo<!>(C)
|
||||
false -> { <!AMBIGUITY!>foo<!>(C) }
|
||||
else -> bar(C)
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
interface A
|
||||
interface B
|
||||
object C : A, B
|
||||
|
||||
fun foo(a: A): Int = 0
|
||||
fun foo(b: B): Double = 0.0
|
||||
|
||||
fun bar(a: A): Int = 0
|
||||
|
||||
val l0: Int
|
||||
get() =
|
||||
if (1 < 2) {
|
||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>(C)
|
||||
} else {
|
||||
bar(C)
|
||||
}
|
||||
|
||||
val l1: Int
|
||||
get() = when {
|
||||
true -> <!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>(C)
|
||||
false -> { <!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>(C) }
|
||||
else -> bar(C)
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package
|
||||
|
||||
public val l0: kotlin.Int
|
||||
public val l1: kotlin.Int
|
||||
public fun bar(/*0*/ a: A): kotlin.Int
|
||||
public fun foo(/*0*/ a: A): kotlin.Int
|
||||
public fun foo(/*0*/ b: B): kotlin.Double
|
||||
|
||||
public interface A {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface B {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public object C : A, B {
|
||||
private constructor C()
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user