Struct miri::FrameExtra

source ·
pub struct FrameExtra<'tcx> {
    pub borrow_tracker: Option<FrameState>,
    pub catch_unwind: Option<CatchUnwindData<'tcx>>,
    pub timing: Option<DetachedTiming>,
    pub is_user_relevant: bool,
    salt: usize,
}
Expand description

Extra data stored with each stack frame

Fields§

§borrow_tracker: Option<FrameState>

Extra data for the Borrow Tracker.

§catch_unwind: Option<CatchUnwindData<'tcx>>

If this is Some(), then this is a special “catch unwind” frame (the frame of try_fn called by try). When this frame is popped during unwinding a panic, we stop unwinding, use the CatchUnwindData to handle catching.

§timing: Option<DetachedTiming>

If measureme profiling is enabled, holds timing information for the start of this frame. When we finish executing this frame, we use this to register a completed event with measureme.

§is_user_relevant: bool

Indicates whether a Frame is part of a workspace-local crate and is also not #[track_caller]. We compute this once on creation and store the result, as an optimization. This is used by MiriMachine::current_span and MiriMachine::caller_span

§salt: usize

We have a cache for the mapping from mir::Const to resulting AllocId. However, we don’t want all frames to always get the same result, so we insert an additional bit of “salt” into the cache key. This salt is fixed per-frame so that within a call, a const will have a stable address.

Trait Implementations§

source§

impl<'tcx> Debug for FrameExtra<'tcx>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl VisitProvenance for FrameExtra<'_>

source§

fn visit_provenance(&self, visit: &mut VisitWith<'_>)

Auto Trait Implementations§

§

impl<'tcx> Freeze for FrameExtra<'tcx>

§

impl<'tcx> !RefUnwindSafe for FrameExtra<'tcx>

§

impl<'tcx> Send for FrameExtra<'tcx>

§

impl<'tcx> Sync for FrameExtra<'tcx>

§

impl<'tcx> Unpin for FrameExtra<'tcx>

§

impl<'tcx> !UnwindSafe for FrameExtra<'tcx>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

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: 312 bytes