Files
kotlin-fork/compiler/testData/diagnostics/tests/controlFlowAnalysis/reassignmentInTryCatch.fir.kt
T
Andrey Zinovyev 06b23d5937 [FIR] Improve the control flow graph around try expressions
1. throw goes to catches instead of main exist block
2. return goes via finally (single level only supported atm)
3. collect non-direct return to retrieve all return expressions easier
2021-08-06 11:49:34 +03:00

103 lines
1.6 KiB
Kotlin
Vendored

// KT-13612 related tests (reassignment in try-catch-finally)
fun f1() {
val n: Int
try {
n = 1
throw Exception()
}
catch (e: Exception) {
// KT-13612: reassignment
<!VAL_REASSIGNMENT!>n<!> = 2
}
n.hashCode()
}
fun f2() {
val n: Int
try {
n = 1
throw Exception()
}
finally {
<!VAL_REASSIGNMENT!>n<!> = 2
}
<!UNINITIALIZED_VARIABLE!>n<!>.hashCode()
}
fun g1(flag: Boolean) {
val n: Int
try {
if (flag) throw Exception()
n = 1
}
catch (e: Exception) {
// KT-13612: ? reassignment or definite assignment ?
<!VAL_REASSIGNMENT!>n<!> = 2
}
n.hashCode()
}
fun g2(flag: Boolean) {
val n: Int
try {
if (flag) throw Exception()
n = 1
}
finally {
<!VAL_REASSIGNMENT!>n<!> = 2
}
n.hashCode()
}
fun h1(flag: Boolean) {
val n = try {
if (flag) throw Exception()
1
}
catch (e: Exception) {
2
}
n.hashCode()
}
fun h2(flag: Boolean) {
val n = try {
if (flag) throw Exception()
1
}
finally {
2
}
n.hashCode()
}
fun j(flag: Boolean) {
if (flag) throw Exception()
}
fun k1(flag: Boolean) {
val n: Int
try {
n = 1
j(flag)
}
catch (e: Exception) {
// KT-13612: reassignment
<!VAL_REASSIGNMENT!>n<!> = 2
}
n.hashCode()
}
fun k2(flag: Boolean) {
val n: Int
try {
n = 1
j(flag)
}
finally {
<!VAL_REASSIGNMENT!>n<!> = 2
}
n.hashCode()
}