compiler: support panics inside indirect deferred functions

Found this bug while working on WebAssembly recover support.
This commit is contained in:
Ayke van Laethem
2024-08-04 15:37:50 +02:00
parent a47ff02c82
commit 2f7952ff29
3 changed files with 35 additions and 2 deletions
+27
View File
@@ -17,6 +17,12 @@ func main() {
println("\n# panic inside defer")
panicInsideDefer()
println("\n# panic inside indirect defer")
panicInsideIndirectDefer(callPanic)
println("\n# panic inside closure")
panicInsideClosure()
println("\n# panic replace")
panicReplace()
}
@@ -77,6 +83,27 @@ func panicInsideDefer() {
}()
}
func panicInsideIndirectDefer(callback func()) {
defer func() {
printitf("recovered:", recover())
}()
defer callback()
}
func callPanic() {
panic("panic")
}
func panicInsideClosure() {
msg := "panic"
defer func() {
printitf("recovered:", recover())
}()
defer func() {
panic(msg)
}()
}
func panicReplace() {
defer func() {
printitf("recovered:", recover())
+6
View File
@@ -19,6 +19,12 @@ recovered 2: foo
# panic inside defer
recovered: panic
# panic inside indirect defer
recovered: panic
# panic inside closure
recovered: panic
# panic replace
panic 1
panic 2