pub struct AbortUnwindingCalls;
Expand description
A pass that runs which is targeted at ensuring that codegen guarantees about unwinding are upheld for compilations of panic=abort programs.
When compiling with panic=abort codegen backends generally want to assume
that all Rust-defined functions do not unwind, and it’s UB if they actually
do unwind. Foreign functions, however, can be declared as “may unwind” via
their ABI (e.g. extern "C-unwind"
). To uphold the guarantees that
Rust-defined functions never unwind a well-behaved Rust program needs to
catch unwinding from foreign functions and force them to abort.
This pass walks over all functions calls which may possibly unwind, and if any are found sets their cleanup to a block that aborts the process. This forces all unwinds, in panic=abort mode happening in foreign code, to trigger a process abort.
Trait Implementations§
source§impl<'tcx> MirPass<'tcx> for AbortUnwindingCalls
impl<'tcx> MirPass<'tcx> for AbortUnwindingCalls
source§impl PartialEq<AbortUnwindingCalls> for AbortUnwindingCalls
impl PartialEq<AbortUnwindingCalls> for AbortUnwindingCalls
source§fn eq(&self, other: &AbortUnwindingCalls) -> bool
fn eq(&self, other: &AbortUnwindingCalls) -> bool
impl StructuralPartialEq for AbortUnwindingCalls
Auto Trait Implementations§
impl RefUnwindSafe for AbortUnwindingCalls
impl Send for AbortUnwindingCalls
impl Sync for AbortUnwindingCalls
impl Unpin for AbortUnwindingCalls
impl UnwindSafe for AbortUnwindingCalls
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 0 bytes