pub struct Memory<'mir, 'tcx, M>where
M: Machine<'mir, 'tcx>,{
pub(super) alloc_map: <M as Machine<'mir, 'tcx>>::MemoryMap,
extra_fn_ptr_map: HashMap<AllocId, <M as Machine<'mir, 'tcx>>::ExtraFnVal, BuildHasherDefault<FxHasher>>,
pub(super) dead_alloc_map: HashMap<AllocId, (Size, Align), BuildHasherDefault<FxHasher>>,
}
Fields
alloc_map: <M as Machine<'mir, 'tcx>>::MemoryMap
Allocations local to this instance of the miri engine. The kind
helps ensure that the same mechanism is used for allocation and
deallocation. When an allocation is not found here, it is a
global and looked up in the tcx
for read access. Some machines may
have to mutate this map even on a read-only access to a global (because
they do pointer provenance tracking and the allocations in tcx
have
the wrong type), so we let the machine override this type.
Either way, if the machine allows writing to a global, doing so will
create a copy of the global allocation here.
extra_fn_ptr_map: HashMap<AllocId, <M as Machine<'mir, 'tcx>>::ExtraFnVal, BuildHasherDefault<FxHasher>>
Map for “extra” function pointers.
dead_alloc_map: HashMap<AllocId, (Size, Align), BuildHasherDefault<FxHasher>>
To be able to compare pointers with null, and to check alignment for accesses to ZSTs (where pointers may dangle), we keep track of the size even for allocations that do not exist any more.
Auto Trait Implementations
impl<'mir, 'tcx, M> RefUnwindSafe for Memory<'mir, 'tcx, M>where
<M as Machine<'mir, 'tcx>>::ExtraFnVal: RefUnwindSafe,
<M as Machine<'mir, 'tcx>>::MemoryMap: RefUnwindSafe,
impl<'mir, 'tcx, M> Send for Memory<'mir, 'tcx, M>where
<M as Machine<'mir, 'tcx>>::ExtraFnVal: Send,
<M as Machine<'mir, 'tcx>>::MemoryMap: Send,
impl<'mir, 'tcx, M> Sync for Memory<'mir, 'tcx, M>where
<M as Machine<'mir, 'tcx>>::ExtraFnVal: Sync,
<M as Machine<'mir, 'tcx>>::MemoryMap: Sync,
impl<'mir, 'tcx, M> Unpin for Memory<'mir, 'tcx, M>where
<M as Machine<'mir, 'tcx>>::ExtraFnVal: Unpin,
<M as Machine<'mir, 'tcx>>::MemoryMap: Unpin,
impl<'mir, 'tcx, M> UnwindSafe for Memory<'mir, 'tcx, M>where
<M as Machine<'mir, 'tcx>>::ExtraFnVal: UnwindSafe,
<M as Machine<'mir, 'tcx>>::MemoryMap: UnwindSafe,
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
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: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.