Merge pull request #396 from tmandry/patch-1

Copyedits to FFI and unwinding section
pull/398/head
Eric Huss 2 years ago committed by GitHub
commit bd1829d235
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -721,17 +721,20 @@ No `transmute` required!
## FFI and unwinding ## FFI and unwinding
Its important to be mindful of unwinding when working with FFI. Each Its important to be mindful of unwinding when working with FFI. Most
non-`Rust` ABI comes in two variants, one with `-unwind` suffix and one without. If ABI strings come in two variants, one with an `-unwind` suffix and one without.
you expect Rust `panic`s or foreign (e.g. C++) exceptions to cross an FFI The `Rust` ABI always permits unwinding, so there is no `Rust-unwind` ABI.
boundary, that boundary must use the appropriate `-unwind` ABI string (note
that compiling with `panic=abort` will still cause `panic!` to immediately
abort the process, regardless of which ABI is specified by the function that
`panic`s).
If you expect Rust `panic`s or foreign (e.g. C++) exceptions to cross an FFI
boundary, that boundary must use the appropriate `-unwind` ABI string.
Conversely, if you do not expect unwinding to cross an ABI boundary, use one of Conversely, if you do not expect unwinding to cross an ABI boundary, use one of
the non-`unwind` ABI strings (other than `Rust`, which always permits the non-`unwind` ABI strings.
unwinding). If an unwinding operation does encounter an ABI boundary that is
> Note: Compiling with `panic=abort` will still cause `panic!` to immediately
abort the process, regardless of which ABI is specified by the function that
`panic`s.
If an unwinding operation does encounter an ABI boundary that is
not permitted to unwind, the behavior depends on the source of the unwinding not permitted to unwind, the behavior depends on the source of the unwinding
(Rust `panic` or a foreign exception): (Rust `panic` or a foreign exception):

Loading…
Cancel
Save