Struct miri::borrow_tracker::stacked_borrows::Stacks
source · pub struct Stacks {
stacks: RangeMap<Stack>,
history: AllocHistory,
exposed_tags: FxHashSet<BorTag>,
modified_since_last_gc: bool,
}
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.
modified_since_last_gc: bool
Whether this memory has been modified since the last time the tag GC ran
Implementations§
source§impl<'tcx> Stacks
impl<'tcx> Stacks
Map per-stack operations to higher-level per-location-range operations.
sourcefn new(
size: Size,
perm: Permission,
tag: BorTag,
id: AllocId,
machine: &MiriMachine<'_, '_>
) -> Self
fn new( size: Size, perm: Permission, tag: BorTag, id: AllocId, machine: &MiriMachine<'_, '_> ) -> 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<BorTag>) -> 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<BorTag>) -> InterpResult<'tcx> ) -> InterpResult<'tcx>
Call f
on every stack in the range.
source§impl Stacks
impl Stacks
Glue code to connect with Miri Machine Hooks
pub fn new_allocation( id: AllocId, size: Size, state: &mut GlobalStateInner, kind: MemoryKind<MiriMemoryKind>, machine: &MiriMachine<'_, '_> ) -> Self
pub fn before_memory_read<'tcx, 'mir, 'ecx>( &mut self, alloc_id: AllocId, tag: ProvenanceExtra, range: AllocRange, machine: &'ecx MiriMachine<'mir, 'tcx> ) -> InterpResult<'tcx>where 'tcx: 'ecx,
pub fn before_memory_write<'tcx>( &mut self, alloc_id: AllocId, tag: ProvenanceExtra, range: AllocRange, machine: &MiriMachine<'_, 'tcx> ) -> InterpResult<'tcx>
pub fn before_memory_deallocation<'tcx>( &mut self, alloc_id: AllocId, tag: ProvenanceExtra, range: AllocRange, machine: &MiriMachine<'_, '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§
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
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: 240 bytes