Add some data flow analysis tests on when

This commit is contained in:
Dmitry Savvinov
2018-06-08 11:29:27 +03:00
committed by Dmitry Petrov
parent ae929d0f08
commit 148d03e365
10 changed files with 213 additions and 0 deletions
@@ -0,0 +1,43 @@
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE
fun testJumpOutInElvis(x: Int?) {
loop@ while (true) {
val y = when (val z = x ?: break@loop) {
0 -> "0"
else -> "not 0"
}
<!DEBUG_INFO_SMARTCAST!>x<!>.inc()
}
x<!UNSAFE_CALL!>.<!>inc()
}
fun testJumpOutInElvisLikeIf(x: Int?) {
loop@ while (true) {
val y = when (val z = if (x == null) break@loop else <!DEBUG_INFO_SMARTCAST!>x<!>) {
0 -> "0"
else -> "not 0"
}
<!DEBUG_INFO_SMARTCAST!>x<!>.inc()
}
x<!UNSAFE_CALL!>.<!>inc()
}
fun getBoolean() = true
fun testJumpOutInIf(x: Int?) {
loop@ while (true) {
val y = when (val z = if (getBoolean()) { x!!; break@loop } else x) {
0 -> "0"
else -> "not 0"
}
x<!UNSAFE_CALL!>.<!>inc()
}
x<!UNSAFE_CALL!>.<!>inc() // Actually, safe, but it's OK if it's error
}