Files
tinygo/testdata/recover.txt
T
Jake Bailey 29b4c6723f runtime: make divide-by-zero and nil dereference panics recoverable
Modify the Unix signal handler to redirect execution to a Go sigpanic
function instead of printing an error and re-raising the signal.
The C signal handler modifies the ucontext to make the faulting
instruction appear to have called tinygo_sigpanic, which then calls
runtimePanic with the appropriate message.

Supported on all architectures TinyGo targets on Linux and Darwin:
x86_64, i386, aarch64, ARM, and MIPS. Also registers SIGFPE, which
was previously not handled at all.
2026-06-04 19:25:47 +02:00

56 lines
997 B
Plaintext

# simple recover
running panic...
recovering...
recovered: panic
# recover with result
running panic...
recovered: panic
result: 3
# nested defer frame
deferred nested function
recovered: panic
# nested panic: panic inside recover
recovered 1: panic
recovered 2: foo
# panic inside defer
recovered: panic
# panic replace
panic 1
panic 2
recovered: panic 2
# defer panic
defer panic
recovered from deferred call: deferred panic
# indirect recover
indirect recover returned: indirect panic
# runtime.Goexit
Goexit deferred function, recover is nil: true
# repanic
inner, repanicking
outer recovered: repanic value
# recover runtime errors
recovered: index
recovered: index from helper
recovered: slice
recovered: type assert
recovered: empty interface type assert
# recover from nil map and closed channel
recovered: nil map
recovered: closed chan
recovered: close nil chan
# recover from hardware signals
recovered: divide by zero
recovered: nil pointer dereference