Files
tinygo/testdata/recover.txt
T
Jake Bailey eed4afda63 compiler, runtime: make runtime panics recoverable
Emit fault checkpoints around compiler-generated runtime assertions so
runtimePanicAt can unwind through the existing defer/recover machinery
instead of aborting. This lets panics from bounds checks, type checks,
and other compiler-inserted runtime checks be recovered by deferred
functions.

Mark functions that call recover as noinline. Inlining such a function
into a deferred closure can make recover observe the wrong call context
and report success when it should return nil.

Addresses tinygo-org/tinygo issues 2759 and 3510.
2026-06-04 19:25:47 +02:00

47 lines
782 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