mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-25 06:03:16 +00:00
17a07d71bf
Implement RFC 2945: "C-unwind" ABI ## Implement RFC 2945: "C-unwind" ABI This branch implements [RFC 2945]. The tracking issue for this RFC is #74990. The feature gate for the issue is `#![feature(c_unwind)]`. This RFC was created as part of the ffi-unwind project group tracked at rust-lang/lang-team#19. ### Changes Further details will be provided in commit messages, but a high-level overview of the changes follows: * A boolean `unwind` payload is added to the `C`, `System`, `Stdcall`, and `Thiscall` variants, marking whether unwinding across FFI boundaries is acceptable. The cases where each of these variants' `unwind` member is true correspond with the `C-unwind`, `system-unwind`, `stdcall-unwind`, and `thiscall-unwind` ABI strings introduced in RFC 2945 [3]. * This commit adds a `c_unwind` feature gate for the new ABI strings. Tests for this feature gate are included in `src/test/ui/c-unwind/`, which ensure that this feature gate works correctly for each of the new ABIs. A new language features entry in the unstable book is added as well. * We adjust the `rustc_middle::ty::layout::fn_can_unwind` function, used to compute whether or not a `FnAbi` object represents a function that should be able to unwind when `panic=unwind` is in use. * Changes are also made to `rustc_mir_build::build::should_abort_on_panic` so that the function ABI is used to determind whether it should abort, assuming that the `panic=unwind` strategy is being used, and no explicit unwind attribute was provided. [RFC 2945]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md |
||
---|---|---|
.. | ||
abi | ||
bin | ||
debuginfo | ||
driver | ||
intrinsics | ||
optimize | ||
allocator.rs | ||
analyze.rs | ||
archive.rs | ||
backend.rs | ||
base.rs | ||
cast.rs | ||
codegen_i128.rs | ||
common.rs | ||
constant.rs | ||
discriminant.rs | ||
inline_asm.rs | ||
lib.rs | ||
linkage.rs | ||
main_shim.rs | ||
metadata.rs | ||
num.rs | ||
pointer.rs | ||
pretty_clif.rs | ||
toolchain.rs | ||
trap.rs | ||
unsize.rs | ||
value_and_place.rs | ||
vtable.rs |