Struct rustc_const_eval::interpret::Memory
source · pub struct Memory<'mir, 'tcx, M: Machine<'mir, 'tcx>> {
pub(super) alloc_map: M::MemoryMap,
extra_fn_ptr_map: FxHashMap<AllocId, M::ExtraFnVal>,
pub(super) dead_alloc_map: FxHashMap<AllocId, (Size, Align)>,
}
Fields§
§alloc_map: M::MemoryMap
Allocations local to this instance of the interpreter. 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: FxHashMap<AllocId, M::ExtraFnVal>
Map for “extra” function pointers.
dead_alloc_map: FxHashMap<AllocId, (Size, Align)>
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.
Implementations§
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§
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: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.