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
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>)
fn name(&self) -> &'static str
fn profiler_name(&self) -> &'static str
source§fn is_enabled(&self, _sess: &Session) -> bool
fn is_enabled(&self, _sess: &Session) -> bool
true
if this pass is enabled with the current combination of compiler flags.fn is_mir_dump_enabled(&self) -> bool
source§impl PartialEq<AbortUnwindingCalls> for AbortUnwindingCalls
impl PartialEq<AbortUnwindingCalls> for AbortUnwindingCalls
source§fn eq(&self, other: &AbortUnwindingCalls) -> bool
fn eq(&self, other: &AbortUnwindingCalls) -> bool
self
and other
values to be equal, and is used
by ==
.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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
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