Add some tests for inference and DFA of try/catch/finally

This commit is contained in:
Dmitriy Novozhilov
2019-02-17 12:15:27 +03:00
parent 8d3271cc68
commit 4e64b07727
16 changed files with 865 additions and 0 deletions
@@ -0,0 +1,100 @@
// !WTIH_NEW_INFERENCE
class ExcA : Exception()
class ExcB : Exception()
fun test0(x: Int?) {
val y = try {
x
} finally {
}
if (x != null) {
<!DEBUG_INFO_SMARTCAST!>x<!>.inc()
y<!UNSAFE_CALL!>.<!>inc()
}
if (y != null) {
x<!UNSAFE_CALL!>.<!>inc()
<!DEBUG_INFO_SMARTCAST!>y<!>.inc()
}
}
fun test1(x: Int?) {
val y = try {
x
}
catch (e: Exception) {
42
}
if (x != null) {
<!DEBUG_INFO_SMARTCAST!>x<!>.inc()
y<!UNSAFE_CALL!>.<!>inc()
}
if (y != null) {
x<!UNSAFE_CALL!>.<!>inc()
<!DEBUG_INFO_SMARTCAST!>y<!>.inc()
}
}
fun test2(x: Int?) {
val y = try {
x
}
catch (e: Exception) {
x
}
if (x != null) {
<!DEBUG_INFO_SMARTCAST!>x<!>.inc()
y<!UNSAFE_CALL!>.<!>inc()
}
if (y != null) {
x<!UNSAFE_CALL!>.<!>inc()
<!DEBUG_INFO_SMARTCAST!>y<!>.inc()
}
}
fun test3(x: Int?) {
val y = try {
x
} catch (e: Exception) {
return
}
if (x != null) {
<!DEBUG_INFO_SMARTCAST!>x<!>.inc()
y<!UNSAFE_CALL!>.<!>inc()
}
if (y != null) {
x<!UNSAFE_CALL!>.<!>inc()
<!DEBUG_INFO_SMARTCAST!>y<!>.inc()
}
}
fun test5(x: Int?) {
val y = try {
x
}
catch (e: ExcA) {
return
}
catch (e: ExcB) {
x
}
if (x != null) {
<!DEBUG_INFO_SMARTCAST!>x<!>.inc()
y<!UNSAFE_CALL!>.<!>inc()
}
if (y != null) {
x<!UNSAFE_CALL!>.<!>inc()
<!DEBUG_INFO_SMARTCAST!>y<!>.inc()
}
}