Struct rustc_const_eval::interpret::memory::Memory
source · pub struct Memory<'mir, 'tcx, M: Machine<'mir, 'tcx>> {
pub(super) alloc_map: M::MemoryMap,
extra_fn_ptr_map: FxIndexMap<AllocId, M::ExtraFnVal>,
pub(super) dead_alloc_map: FxIndexMap<AllocId, (Size, Align)>,
validation_in_progress: Cell<bool>,
}
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: FxIndexMap<AllocId, M::ExtraFnVal>
Map for “extra” function pointers.
dead_alloc_map: FxIndexMap<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.
validation_in_progress: Cell<bool>
This stores whether we are currently doing reads purely for the purpose of validation. Those reads do not trigger the machine’s hooks for memory reads. Needless to say, this must only be set with great care!
Implementations§
Auto Trait Implementations§
impl<'mir, 'tcx, M> DynSend for Memory<'mir, 'tcx, M>
impl<'mir, 'tcx, M> !DynSync for Memory<'mir, 'tcx, M>
impl<'mir, 'tcx, M> !Freeze for Memory<'mir, 'tcx, M>
impl<'mir, 'tcx, M> !RefUnwindSafe for Memory<'mir, 'tcx, M>
impl<'mir, 'tcx, M> Send for Memory<'mir, 'tcx, M>
impl<'mir, 'tcx, M> !Sync for Memory<'mir, 'tcx, M>
impl<'mir, 'tcx, M> Unpin for Memory<'mir, 'tcx, M>
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
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
§impl<T> Filterable for T
impl<T> Filterable for T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed ) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
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.