Struct miri::borrow_tracker::stacked_borrows::Stacks
source · pub struct Stacks {
stacks: RangeMap<Stack>,
history: AllocHistory,
exposed_tags: FxHashSet<BorTag>,
}
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§
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, machine: &MiriMachine<'_>, ) -> Self
pub fn before_memory_read<'ecx, 'tcx>(
&mut self,
alloc_id: AllocId,
tag: ProvenanceExtra,
range: AllocRange,
machine: &'ecx MiriMachine<'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, size: Size, machine: &MiriMachine<'tcx>, ) -> InterpResult<'tcx>
Trait Implementations§
source§impl VisitProvenance for Stacks
impl VisitProvenance for Stacks
fn visit_provenance(&self, visit: &mut VisitWith<'_>)
Auto Trait Implementations§
impl Freeze for Stacks
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
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)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