[FIR] Fix exponential analysis of augmented array access calls
^KT-50861 Fixed
This commit is contained in:
committed by
teamcity
parent
c4735f9f29
commit
ade2307345
+201
@@ -0,0 +1,201 @@
|
||||
FILE: arraySetWithPlusAssign.kt
|
||||
public final class A : R|kotlin/Any| {
|
||||
public constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final operator fun get(i: R|kotlin/Int|): R|A| {
|
||||
^get this@R|/A|
|
||||
}
|
||||
|
||||
public final operator fun plusAssign(v: R|() -> kotlin/Unit|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test_1(x: R|A|): R|kotlin/Unit| {
|
||||
R|<local>/x|.R|/A.get|(Int(1)).R|/A.plusAssign|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
R|<local>/x|.R|/A.get|(Int(1)).R|/A.plusAssign|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
Q|kotlin/Unit|
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
public final class B : R|kotlin/Any| {
|
||||
public constructor(): R|B| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final operator fun get(i: R|kotlin/Int|): R|B| {
|
||||
^get this@R|/B|
|
||||
}
|
||||
|
||||
public final operator fun plusAssign(a: R|() -> kotlin/Unit|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun plus(x: R|kotlin/String|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test_2(x: R|B|): R|kotlin/Unit| {
|
||||
R|<local>/x|.R|/B.get|(Int(1)).R|/B.plusAssign|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
R|<local>/x|.R|/B.get|(Int(1)).R|/B.plusAssign|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
Q|kotlin/Unit|
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
public final class C : R|kotlin/Any| {
|
||||
public constructor(): R|C| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final operator fun get(i: R|kotlin/Int|): R|C| {
|
||||
^get this@R|/C|
|
||||
}
|
||||
|
||||
public final operator fun set(i: R|kotlin/Int|, v: R|kotlin/String|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun plusAssign(a: R|() -> kotlin/Unit|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun plus(v: R|() -> kotlin/Unit|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test_3(x: R|C|): R|kotlin/Unit| {
|
||||
R|<local>/x|.R|/C.get|(Int(1)).R|/C.plusAssign|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
R|<local>/x|.R|/C.get|(Int(1)).R|/C.plusAssign|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
Q|kotlin/Unit|
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
public final class D : R|kotlin/Any| {
|
||||
public constructor(): R|D| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final operator fun set(i: R|kotlin/Int|, x: R|D|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun get(i: R|kotlin/Int|): R|D| {
|
||||
^get this@R|/D|
|
||||
}
|
||||
|
||||
public final operator fun plusAssign(x: R|() -> kotlin/Unit|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun plus(v: R|() -> kotlin/Unit|): R|D| {
|
||||
^plus this@R|/D|
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test_4(x: R|D|): R|kotlin/Unit| {
|
||||
R|<local>/x|.R|/D.get|(Int(1)).<Operator overload ambiguity. Compatible candidates: [/D.plusAssign, /D.set]>#(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
R|<local>/x|.R|/D.get|(Int(1)).<Operator overload ambiguity. Compatible candidates: [/D.plusAssign, /D.set]>#(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
Q|kotlin/Unit|
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
public final class E : R|kotlin/Any| {
|
||||
public constructor(): R|E| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test_5(x: R|E|): R|kotlin/Unit| {
|
||||
R|<local>/x|.<Unresolved name: get>#(Int(1)).<Unresolved name: +=>#(fun <anonymous>(): <ERROR TYPE REF: Unresolved name: plusAssign> <inline=Unknown> {
|
||||
R|/someCallInsideLambda|()
|
||||
^ R|<local>/x|.<Unresolved name: get>#(Int(1)).<Unresolved name: +=>#(fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
|
||||
R|/someCallInsideLambda|()
|
||||
Q|kotlin/Unit|
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
public final class F : R|kotlin/Any| {
|
||||
public constructor(): R|F| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final operator fun set(i: R|kotlin/Int|, x: R|F|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun get(i: R|kotlin/Int|): R|F| {
|
||||
^get this@R|/F|
|
||||
}
|
||||
|
||||
public final operator fun plusAssign(x: R|() -> kotlin/String|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun plus(v: R|() -> kotlin/Int|): R|F| {
|
||||
^plus this@R|/F|
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test_6(x: R|F|): R|kotlin/Unit| {
|
||||
R|<local>/x|.R|/F.get|(Int(1)).<Operator overload ambiguity. Compatible candidates: [/F.plusAssign, /F.set]>#(fun <anonymous>(): R|kotlin/String| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
^ String(please choose String)
|
||||
}
|
||||
)
|
||||
}
|
||||
public final class G : R|kotlin/Any| {
|
||||
public constructor(): R|G| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final operator fun get(i: R|kotlin/Int|, j: R|kotlin/Int|, k: R|kotlin/Int|): R|G| {
|
||||
^get this@R|/G|
|
||||
}
|
||||
|
||||
public final operator fun set(i: R|kotlin/Int|, j: R|kotlin/Int|, k: R|kotlin/Int|, x: R|G|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public final operator fun plus(v: R|() -> kotlin/Unit|): R|G| {
|
||||
^plus this@R|/G|
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test_7(x: R|G|): R|kotlin/Unit| {
|
||||
{
|
||||
lval <<array>>: R|G| = R|<local>/x|
|
||||
lval <<index_0>>: R|kotlin/Int| = Int(1)
|
||||
lval <<index_1>>: R|kotlin/Int| = Int(2)
|
||||
lval <<index_2>>: R|kotlin/Int| = Int(3)
|
||||
R|<local>/<<array>>|.R|/G.set|(R|<local>/<<index_0>>|, R|<local>/<<index_1>>|, R|<local>/<<index_2>>|, R|<local>/<<array>>|.R|/G.get|(R|<local>/<<index_0>>|, R|<local>/<<index_1>>|, R|<local>/<<index_2>>|).R|/G.plus|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
{
|
||||
lval <<array>>: R|G| = R|<local>/x|
|
||||
lval <<index_0>>: R|kotlin/Int| = Int(1)
|
||||
lval <<index_1>>: R|kotlin/Int| = Int(2)
|
||||
lval <<index_2>>: R|kotlin/Int| = Int(3)
|
||||
R|<local>/<<array>>|.R|/G.set|(R|<local>/<<index_0>>|, R|<local>/<<index_1>>|, R|<local>/<<index_2>>|, R|<local>/<<array>>|.R|/G.get|(R|<local>/<<index_0>>|, R|<local>/<<index_1>>|, R|<local>/<<index_2>>|).R|/G.plus|(fun <anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
R|/someCallInsideLambda|()
|
||||
Q|kotlin/Unit|
|
||||
}
|
||||
))
|
||||
}
|
||||
|
||||
}
|
||||
))
|
||||
}
|
||||
|
||||
}
|
||||
public final fun someCallInsideLambda(): R|kotlin/Unit| {
|
||||
}
|
||||
Reference in New Issue
Block a user