Updated exception table generation: try block return moved to uncatched interval
#KT-8148 Fixed
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
class A(var value: String)
|
||||
|
||||
fun box(): String {
|
||||
val a = A("start")
|
||||
|
||||
try {
|
||||
test(a)
|
||||
} catch(e: java.lang.RuntimeException) {
|
||||
|
||||
}
|
||||
|
||||
if (a.value != "start, try, finally1, finally2") return "fail: ${a.value}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun test(a: A) : String {
|
||||
try {
|
||||
try {
|
||||
a.value += ", try"
|
||||
return a.value
|
||||
} finally {
|
||||
a.value += ", finally1"
|
||||
}
|
||||
} finally {
|
||||
a.value += ", finally2"
|
||||
throw RuntimeException("fail")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
class A(var value: String)
|
||||
|
||||
fun box(): String {
|
||||
val a = A("start")
|
||||
|
||||
try {
|
||||
test(a)
|
||||
} catch(e: java.lang.RuntimeException) {
|
||||
|
||||
}
|
||||
|
||||
if (a.value != "start, try, finally1, finally2") return "fail: ${a.value}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun test(a: A) : String {
|
||||
while (true) {
|
||||
try {
|
||||
try {
|
||||
a.value += ", try"
|
||||
break
|
||||
}
|
||||
finally {
|
||||
a.value += ", finally1"
|
||||
}
|
||||
}
|
||||
finally {
|
||||
a.value += ", finally2"
|
||||
throw RuntimeException("fail")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
class A(var value: String)
|
||||
|
||||
fun box(): String {
|
||||
val a = A("start")
|
||||
|
||||
try {
|
||||
test(a)
|
||||
} catch(e: java.lang.RuntimeException) {
|
||||
|
||||
}
|
||||
|
||||
if (a.value != "start, try, finally1, finally2") return "fail: ${a.value}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun test(a: A) : String {
|
||||
while (a.value == "start") {
|
||||
try {
|
||||
try {
|
||||
a.value += ", try"
|
||||
continue
|
||||
}
|
||||
finally {
|
||||
a.value += ", finally1"
|
||||
}
|
||||
}
|
||||
finally {
|
||||
a.value += ", finally2"
|
||||
throw RuntimeException("fail")
|
||||
}
|
||||
}
|
||||
return "fail"
|
||||
}
|
||||
Reference in New Issue
Block a user