[JVM_IR] Fix line number information for try-catch.
In particular, the current line numbers could lead to stepping into the catch handler even when the code in the try did not throw an exception. This was caused by the code materializing the final value having the catch line number. This patch delays the materialization until the line number of the usage has been emitted.
This commit is contained in:
+53
-19
@@ -12,10 +12,17 @@ fun foo() {
|
||||
} catch (e: Throwable) {
|
||||
return
|
||||
}
|
||||
|
||||
val x = try {
|
||||
mightThrow3()
|
||||
} catch (e: Throwable) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var throw1 = false
|
||||
var throw2 = false
|
||||
var throw3 = false
|
||||
|
||||
fun mightThrow() {
|
||||
if (throw1) throw Exception()
|
||||
@@ -25,7 +32,14 @@ fun mightThrow2() {
|
||||
if (throw2) throw Exception()
|
||||
}
|
||||
|
||||
fun mightThrow3(): Int {
|
||||
if (throw3) throw Exception()
|
||||
return 42
|
||||
}
|
||||
|
||||
fun box() {
|
||||
foo()
|
||||
throw3 = true
|
||||
foo()
|
||||
throw2 = true
|
||||
foo()
|
||||
@@ -33,41 +47,61 @@ fun box() {
|
||||
foo()
|
||||
}
|
||||
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
// The JVM_IR backend will stop on line 13 even when mightThrow2
|
||||
// does not throw!
|
||||
|
||||
// LINENUMBERS
|
||||
// test.kt:29 box
|
||||
// test.kt:41 box
|
||||
// test.kt:4 foo
|
||||
// test.kt:5 foo
|
||||
// test.kt:21 mightThrow
|
||||
// test.kt:22 mightThrow
|
||||
// test.kt:28 mightThrow
|
||||
// test.kt:29 mightThrow
|
||||
// test.kt:5 foo
|
||||
// test.kt:10 foo
|
||||
// test.kt:11 foo
|
||||
// test.kt:25 mightThrow2
|
||||
// test.kt:26 mightThrow2
|
||||
// test.kt:32 mightThrow2
|
||||
// test.kt:33 mightThrow2
|
||||
// test.kt:11 foo
|
||||
// test.kt:10 foo
|
||||
// test.kt:15 foo
|
||||
// test.kt:30 box
|
||||
// test.kt:31 box
|
||||
// test.kt:16 foo
|
||||
// test.kt:17 foo
|
||||
// test.kt:36 mightThrow3
|
||||
// test.kt:37 mightThrow3
|
||||
// test.kt:17 foo
|
||||
// test.kt:16 foo
|
||||
// test.kt:21 foo
|
||||
// test.kt:42 box
|
||||
// test.kt:43 box
|
||||
// test.kt:4 foo
|
||||
// test.kt:5 foo
|
||||
// test.kt:21 mightThrow
|
||||
// test.kt:22 mightThrow
|
||||
// test.kt:28 mightThrow
|
||||
// test.kt:29 mightThrow
|
||||
// test.kt:5 foo
|
||||
// test.kt:10 foo
|
||||
// test.kt:11 foo
|
||||
// test.kt:25 mightThrow2
|
||||
// test.kt:32 mightThrow2
|
||||
// test.kt:33 mightThrow2
|
||||
// test.kt:11 foo
|
||||
// test.kt:10 foo
|
||||
// test.kt:16 foo
|
||||
// test.kt:17 foo
|
||||
// test.kt:36 mightThrow3
|
||||
// test.kt:18 foo
|
||||
// test.kt:19 foo
|
||||
// test.kt:44 box
|
||||
// test.kt:45 box
|
||||
// test.kt:4 foo
|
||||
// test.kt:5 foo
|
||||
// test.kt:28 mightThrow
|
||||
// test.kt:29 mightThrow
|
||||
// test.kt:5 foo
|
||||
// test.kt:10 foo
|
||||
// test.kt:11 foo
|
||||
// test.kt:32 mightThrow2
|
||||
// test.kt:12 foo
|
||||
// test.kt:13 foo
|
||||
// test.kt:32 box
|
||||
// test.kt:33 box
|
||||
// test.kt:46 box
|
||||
// test.kt:47 box
|
||||
// test.kt:4 foo
|
||||
// test.kt:5 foo
|
||||
// test.kt:21 mightThrow
|
||||
// test.kt:28 mightThrow
|
||||
// test.kt:6 foo
|
||||
// test.kt:7 foo
|
||||
// test.kt:34 box
|
||||
// test.kt:48 box
|
||||
Reference in New Issue
Block a user