Struct miri::borrow_tracker::FrameState
source · pub struct FrameState {
call_id: CallId,
protected_tags: SmallVec<[(AllocId, BorTag); 2]>,
}
Expand description
Per-call-stack-frame data for borrow tracking
Fields§
§call_id: CallId
The ID of the call this frame corresponds to.
If this frame is protecting any tags, they are listed here. We use this list to do
incremental updates of the global list of protected tags stored in the
stacked_borrows::GlobalState
upon function return, and if we attempt to pop a protected
tag, to identify which call is responsible for protecting the tag.
See Stack::item_invalidated
for more explanation.
Tree Borrows also needs to know which allocation these tags
belong to so that it can perform a read through them immediately before
the frame gets popped.
This will contain one tag per reference passed to the function, so a size of 2 is enough for the vast majority of functions.
Trait Implementations§
source§impl Debug for FrameState
impl Debug for FrameState
source§impl VisitProvenance for FrameState
impl VisitProvenance for FrameState
fn visit_provenance(&self, visit: &mut VisitWith<'_>)
Auto Trait Implementations§
impl Freeze for FrameState
impl RefUnwindSafe for FrameState
impl Send for FrameState
impl Sync for FrameState
impl Unpin for FrameState
impl UnwindSafe for FrameState
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
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
§impl<T> Filterable for T
impl<T> Filterable for T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed ) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for 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: 56 bytes