FIR CFG: do not assume all arguments to inline funs are called in place

Only values for non-noinline, non-crossinline, functional type
parameters qualify.
This commit is contained in:
pyos
2022-11-23 16:02:11 +01:00
committed by teamcity
parent 39f88b9e87
commit d66be3f82d
17 changed files with 165 additions and 112 deletions
@@ -1,7 +1,7 @@
FILE: plusAssignWithLambdaInRhs.kt
public final fun test(): R|kotlin/Unit| {
lval list: R|kotlin/collections/MutableList<kotlin/Function1<kotlin/String, kotlin/String>>| = Null(null)!!
R|<local>/list|.R|kotlin/collections/plusAssign|<R|(kotlin/String) -> kotlin/String|>(fun <anonymous>(it: R|kotlin/String|): R|kotlin/String| <inline=Inline, kind=UNKNOWN> {
R|<local>/list|.R|kotlin/collections/plusAssign|<R|(kotlin/String) -> kotlin/String|>(fun <anonymous>(it: R|kotlin/String|): R|kotlin/String| <inline=Inline> {
^ R|<local>/it|
}
)
@@ -18,7 +18,7 @@ FILE: plusAssignWithLambdaInRhs.kt
public final fun <T> postpone(computation: R|() -> T|): R|A<T>| {
lval queue: R|kotlin/collections/MutableList<kotlin/Function0<kotlin/Unit>>| = R|kotlin/collections/mutableListOf|<R|() -> kotlin/Unit|>()
^postpone R|/A.A|<R|T|>(<L> = A@fun <anonymous>(resolve: R|(T) -> kotlin/Unit|): R|kotlin/Unit| <inline=NoInline> {
R|<local>/queue|.R|kotlin/collections/plusAssign|<R|() -> kotlin/Unit|>(A@fun <anonymous>(): R|kotlin/Unit| <inline=Inline, kind=UNKNOWN> {
R|<local>/queue|.R|kotlin/collections/plusAssign|<R|() -> kotlin/Unit|>(A@fun <anonymous>(): R|kotlin/Unit| <inline=Inline> {
R|<local>/resolve|.R|SubstitutionOverride<kotlin/Function1.invoke: R|kotlin/Unit|>|(R|<local>/computation|.R|SubstitutionOverride<kotlin/Function0.invoke: R|T|>|())
}
)