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
sourceimpl<'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) -> Cow<'_, str>
sourcefn 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.sourcefn phase_change(&self) -> Option<MirPhase>
fn phase_change(&self) -> Option<MirPhase>
fn is_mir_dump_enabled(&self) -> bool
sourceimpl PartialEq<AbortUnwindingCalls> for AbortUnwindingCalls
impl PartialEq<AbortUnwindingCalls> for AbortUnwindingCalls
sourcefn 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
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn 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