Files
kotlin/compiler/testData/diagnostics/tests/controlFlowAnalysis/reassignmentInTryCatch.kt
2016-08-31 19:28:09 +03:00

103 lines
1.7 KiB
Kotlin
Vendored

// KT-13612 related tests (reassignment in try-catch-finally)
fun f1() {
val n: Int
try {
<!UNUSED_VALUE!>n =<!> 1
throw Exception()
}
catch (e: Exception) {
// KT-13612: reassignment
<!VAL_REASSIGNMENT!>n<!> = 2
}
n.hashCode()
}
fun f2() {
val <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>n<!>: Int
try {
<!UNUSED_VALUE!>n =<!> 1
throw Exception()
}
finally {
<!UNUSED_VALUE!><!VAL_REASSIGNMENT!>n<!> =<!> 2
}
<!UNREACHABLE_CODE!>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()
<!UNUSED_VALUE!>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 {
<!UNUSED_EXPRESSION!>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 {
<!UNUSED_VALUE!>n =<!> 1
j(flag)
}
finally {
<!VAL_REASSIGNMENT!>n<!> = 2
}
n.hashCode()
}