[FIR] Don't pass flow from inplace lambdas throw when and elvis expressions

#KT-39080 Fixed
This commit is contained in:
Dmitriy Novozhilov
2020-07-02 16:22:45 +03:00
parent 1429cba2d4
commit 1db2ba51d2
9 changed files with 433 additions and 105 deletions
@@ -0,0 +1,52 @@
FILE: lambdaInWhenBranch.kt
private sealed class Sealed : R|kotlin/Any| {
private constructor(): R|Sealed| {
super<R|kotlin/Any|>()
}
}
private final data class SubClass1 : R|Sealed| {
public[private] constructor(t: R|kotlin/String|): R|SubClass1| {
super<R|Sealed|>()
}
public[private] final val t: R|kotlin/String| = R|<local>/t|
public get(): R|kotlin/String|
public[private] final fun component1(): R|kotlin/String|
public[private] final fun copy(t: R|kotlin/String| = this@R|/SubClass1|.R|/SubClass1.t|): R|SubClass1|
}
private final data class SubClass2 : R|Sealed| {
public[private] constructor(): R|SubClass2| {
super<R|Sealed|>()
}
public[private] final fun copy(): R|SubClass2|
}
private final fun foo(p: R|Sealed|): R|kotlin/Unit| {
when (R|<local>/p|) {
($subj$ is R|SubClass1|) -> {
String().R|kotlin/let|<R|kotlin/String|, R|kotlin/String|>(<L> = let@fun <anonymous>(it: R|kotlin/String|): R|kotlin/String| <kind=EXACTLY_ONCE> {
^ R|<local>/it|
}
)
}
($subj$ is R|SubClass2|) -> {
String()
}
}
R|<local>/p|.<Unresolved name: t>#
when (R|<local>/p|) {
($subj$ is R|SubClass1|) -> {
R|<local>/p|.R|/SubClass1.t|
}
($subj$ is R|SubClass2|) -> {
String(2)
}
}
.R|kotlin/String.length|
}