FIR DFA: x !is T? => x != null

^KT-22996 tag fixed-in-k2
This commit is contained in:
pyos
2022-11-14 17:18:01 +01:00
committed by teamcity
parent 02fedeb9ed
commit f485413cfd
18 changed files with 118 additions and 53 deletions
@@ -0,0 +1,65 @@
// SKIP_TXT
// TESTCASE NUMBER: 1
fun case_1(value_1: Any) = when (value_1) {
is Int -> {}
is Float, is Char, is Boolean -> {}
is String -> {}
else -> {}
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Any?) = when (value_1) {
is Float, is Char, is SealedClass? -> "" // if value is null then this branch will be executed
is Double, is Boolean, is ClassWithCompanionObject.Companion -> ""
else -> ""
}
/*
* TESTCASE NUMBER: 3
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_3(value_1: Any?) = when (value_1) {
is Float, is Char, is Int? -> "" // if value is null then this branch will be executed
is SealedChild2, is Boolean?, is String -> "" // redundant nullable type check
else -> ""
}
/*
* TESTCASE NUMBER: 4
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_4(value_1: Any?) = when (value_1) {
is Float, is Char?, is Int? -> "" // double nullable type check in the one branch
is SealedChild1, is Boolean, is String -> ""
else -> ""
}
/*
* TESTCASE NUMBER: 5
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_5(value_1: Any?): String {
when (value_1) {
is Float, is Char?, is Int -> return ""
is Double, is EmptyObject, is String -> return ""
<!SENSELESS_NULL_IN_WHEN!>null<!> -> return "" // null-check redundant
else -> return ""
}
}
/*
* TESTCASE NUMBER: 6
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_6(value_1: Any?): String {
when (value_1) {
is Float, is Char?, <!SENSELESS_NULL_IN_WHEN!>null<!>, is Int -> return "" // double nullable type check in the one branch
is Double, is EmptyObject, is String -> return ""
else -> return ""
}
}
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// SKIP_TXT
/*
@@ -44,6 +44,6 @@ fun case_6(value_1: Any?): String = when (value_1) {
* ISSUES: KT-22996
*/
fun case_7(value_1: Any?): String = when (value_1) {
is Number?, null, !is SealedChild3 -> "" // triple nullable type check in the one branch
is Number?, <!SENSELESS_NULL_IN_WHEN!>null<!>, !is SealedChild3 -> "" // triple nullable type check in the one branch
else -> ""
}