Struct miri::stacked_borrows::Stacks
source · [−]pub struct Stacks {
stacks: RangeMap<Stack>,
history: AllocHistory,
exposed_tags: FxHashSet<SbTag>,
}
Expand description
Extra per-allocation state.
Fields
stacks: RangeMap<Stack>
history: AllocHistory
Stores past operations on this allocation
The set of tags that have been exposed inside this allocation.
Implementations
sourceimpl<'tcx> Stacks
impl<'tcx> Stacks
Map per-stack operations to higher-level per-location-range operations.
sourcefn new(
size: Size,
perm: Permission,
tag: SbTag,
id: AllocId,
current_span: &mut CurrentSpan<'_, '_, '_>
) -> Self
fn new(
size: Size,
perm: Permission,
tag: SbTag,
id: AllocId,
current_span: &mut CurrentSpan<'_, '_, '_>
) -> Self
Creates a new stack with an initial tag. For diagnostic purposes, we also need to know
the AllocId
of the allocation this is associated with.
sourcefn for_each(
&mut self,
range: AllocRange,
dcx_builder: DiagnosticCxBuilder<'_, '_, '_, 'tcx>,
f: impl FnMut(&mut Stack, &mut DiagnosticCx<'_, '_, '_, '_, 'tcx>, &mut FxHashSet<SbTag>) -> InterpResult<'tcx>
) -> InterpResult<'tcx>
fn for_each(
&mut self,
range: AllocRange,
dcx_builder: DiagnosticCxBuilder<'_, '_, '_, 'tcx>,
f: impl FnMut(&mut Stack, &mut DiagnosticCx<'_, '_, '_, '_, 'tcx>, &mut FxHashSet<SbTag>) -> InterpResult<'tcx>
) -> InterpResult<'tcx>
Call f
on every stack in the range.
sourceimpl Stacks
impl Stacks
Glue code to connect with Miri Machine Hooks
pub fn new_allocation(
id: AllocId,
size: Size,
state: &RefCell<GlobalStateInner>,
kind: MemoryKind<MiriMemoryKind>,
current_span: CurrentSpan<'_, '_, '_>
) -> Self
pub fn before_memory_read<'tcx, 'mir, 'ecx>(
&mut self,
alloc_id: AllocId,
tag: ProvenanceExtra,
range: AllocRange,
state: &RefCell<GlobalStateInner>,
current_span: CurrentSpan<'ecx, 'mir, 'tcx>,
threads: &'ecx ThreadManager<'mir, 'tcx>
) -> InterpResult<'tcx>where
'tcx: 'ecx,
pub fn before_memory_write<'tcx, 'mir, 'ecx>(
&mut self,
alloc_id: AllocId,
tag: ProvenanceExtra,
range: AllocRange,
state: &RefCell<GlobalStateInner>,
current_span: CurrentSpan<'ecx, 'mir, 'tcx>,
threads: &'ecx ThreadManager<'mir, 'tcx>
) -> InterpResult<'tcx>
pub fn before_memory_deallocation<'tcx, 'mir, 'ecx>(
&mut self,
alloc_id: AllocId,
tag: ProvenanceExtra,
range: AllocRange,
state: &RefCell<GlobalStateInner>,
current_span: CurrentSpan<'ecx, 'mir, 'tcx>,
threads: &'ecx ThreadManager<'mir, 'tcx>
) -> InterpResult<'tcx>
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for Stacks
impl !Send for Stacks
impl !Sync for Stacks
impl Unpin for Stacks
impl UnwindSafe for Stacks
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
Mutably borrows from an owned value. Read more
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
impl<V, T> VZip<V> for Twhere
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: 232 bytes