pub(crate) enum RelevantItem<'tcx> {
Statement {
def_id: DefId,
block: BasicBlock,
statement_index: usize,
},
Terminator {
def_id: DefId,
block: BasicBlock,
switch_succ: Option<BasicBlock>,
},
CalleeEntry {
callee: DefId,
args: Vec<usize>,
},
CalleeExit {
dest: usize,
},
ContractFact {
property: Property<'tcx>,
},
UnknownCall,
}Expand description
One relevant item kept from the backward slice.
Variants§
Statement
A MIR statement retained from a basic block. def_id identifies the
function owning block (differs from the caller for inlined callees).
Terminator
A MIR terminator retained from a basic block. For a SwitchInt, block
is the switch block and switch_succ is the successor taken along this
path (so the VM need not re-resolve it from the path); for any other
terminator — or when the path ends at the checkpoint — switch_succ is
None.
CalleeEntry
Enter an inlined callee: bind the caller’s argument locals to the callee
parameters. args holds the caller’s argument local indices.
CalleeExit
Return from an inlined callee: write the callee’s _0 to the caller’s
destination local.
ContractFact
A contract fact injected by the engine before the forward visit. Never produced by the backward visitor itself.
UnknownCall
An unknown call with no summary (unsupported): its effects cannot be
modeled, so the slicer keeps the terminator but conservatively drops
precision on the relevant state it touches. The forward VM is a no-op on
this marker.
Trait Implementations§
Source§impl<'tcx> Clone for RelevantItem<'tcx>
impl<'tcx> Clone for RelevantItem<'tcx>
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for RelevantItem<'tcx>
impl<'tcx> !UnwindSafe for RelevantItem<'tcx>
impl<'tcx> DynSend for RelevantItem<'tcx>
impl<'tcx> DynSync for RelevantItem<'tcx>
impl<'tcx> Freeze for RelevantItem<'tcx>
impl<'tcx> Send for RelevantItem<'tcx>
impl<'tcx> Sync for RelevantItem<'tcx>
impl<'tcx> Unpin for RelevantItem<'tcx>
impl<'tcx> UnsafeUnpin for RelevantItem<'tcx>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more