FIR: more exact nullability determination in potential UNSAFE_CALL check

This commit is contained in:
Mikhail Glukhikh
2021-01-28 21:29:09 +03:00
parent e72ddbcbfe
commit 0ee4f1f393
30 changed files with 82 additions and 69 deletions
@@ -105,8 +105,8 @@ fun case_6() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Byte>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Short>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Int>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Byte>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Short>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Int>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
}
@@ -3,23 +3,23 @@
// TESTCASE NUMBER: 1
fun case_1() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!>)
<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
}
// TESTCASE NUMBER: 2
fun case_2() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!>)
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!>)
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!UNSAFE_CALL!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
}
@@ -89,7 +89,7 @@ fun <T : String?> T.case_9() = this
fun case_9() {
var x: Int? = 10
x = null
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int? & kotlin.Int?")!>x<!>.<!UNSAFE_CALL!>case_9<!>()
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int? & kotlin.Int?")!>x<!>.<!INAPPLICABLE_CANDIDATE!>case_9<!>()
}
/*