Expand description
Represents a pointer in the Miri engine.
Pointers are “tagged” with provenance information; typically the AllocId
they belong to.
Fields
offset: Size
provenance: Tag
Implementations
sourceimpl<Tag> Pointer<Option<Tag>>
impl<Tag> Pointer<Option<Tag>>
sourcepub fn into_pointer_or_addr(self) -> Result<Pointer<Tag>, Size>
pub fn into_pointer_or_addr(self) -> Result<Pointer<Tag>, Size>
Convert this pointer that might have a tag into a pointer that definitely has a tag, or an absolute address.
This is rarely what you want; call ptr_try_get_alloc_id
instead.
sourcepub fn addr(self) -> Size where
Tag: Provenance,
pub fn addr(self) -> Size where
Tag: Provenance,
Returns the absolute address the pointer points to. Only works if Tag::OFFSET_IS_ADDR is true!
sourceimpl<'tcx, Tag> Pointer<Tag>
impl<'tcx, Tag> Pointer<Tag>
pub fn new(provenance: Tag, offset: Size) -> Self
sourcepub fn into_parts(self) -> (Tag, Size)
pub fn into_parts(self) -> (Tag, Size)
Obtain the constituents of this pointer. Not that the meaning of the offset depends on the type Tag
!
This function must only be used in the implementation of Machine::ptr_get_alloc
,
and when a Pointer
is taken apart to be stored efficiently in an Allocation
.
pub fn map_provenance(self, f: impl FnOnce(Tag) -> Tag) -> Self
pub fn offset(
self,
i: Size,
cx: &impl HasDataLayout
) -> InterpResult<'tcx, Self>
pub fn overflowing_offset(
self,
i: Size,
cx: &impl HasDataLayout
) -> (Self, bool)
pub fn wrapping_offset(self, i: Size, cx: &impl HasDataLayout) -> Self
pub fn signed_offset(
self,
i: i64,
cx: &impl HasDataLayout
) -> InterpResult<'tcx, Self>
pub fn overflowing_signed_offset(
self,
i: i64,
cx: &impl HasDataLayout
) -> (Self, bool)
pub fn wrapping_signed_offset(self, i: i64, cx: &impl HasDataLayout) -> Self
Trait Implementations
sourceimpl<Tag: Provenance> Debug for Pointer<Tag>
impl<Tag: Provenance> Debug for Pointer<Tag>
sourceimpl<Tag: Provenance> Debug for Pointer<Option<Tag>>
impl<Tag: Provenance> Debug for Pointer<Option<Tag>>
sourceimpl<'tcx, Tag, __D: TyDecoder<'tcx>> Decodable<__D> for Pointer<Tag> where
Tag: Decodable<__D>,
impl<'tcx, Tag, __D: TyDecoder<'tcx>> Decodable<__D> for Pointer<Tag> where
Tag: Decodable<__D>,
sourceimpl<'tcx, Tag, __E: TyEncoder<'tcx>> Encodable<__E> for Pointer<Tag> where
Tag: Encodable<__E>,
impl<'tcx, Tag, __E: TyEncoder<'tcx>> Encodable<__E> for Pointer<Tag> where
Tag: Encodable<__E>,
sourceimpl From<AllocId> for Pointer
impl From<AllocId> for Pointer
Produces a Pointer
that points to the beginning of the Allocation
.
sourceimpl<'__ctx, Tag> HashStable<StableHashingContext<'__ctx>> for Pointer<Tag> where
Tag: HashStable<StableHashingContext<'__ctx>>,
impl<'__ctx, Tag> HashStable<StableHashingContext<'__ctx>> for Pointer<Tag> where
Tag: HashStable<StableHashingContext<'__ctx>>,
fn hash_stable(
&self,
__hcx: &mut StableHashingContext<'__ctx>,
__hasher: &mut StableHasher
)
sourceimpl<Tag: Ord> Ord for Pointer<Tag>
impl<Tag: Ord> Ord for Pointer<Tag>
sourceimpl<Tag: PartialOrd> PartialOrd<Pointer<Tag>> for Pointer<Tag>
impl<Tag: PartialOrd> PartialOrd<Pointer<Tag>> for Pointer<Tag>
sourcefn partial_cmp(&self, other: &Pointer<Tag>) -> Option<Ordering>
fn partial_cmp(&self, other: &Pointer<Tag>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl<Tag: Copy> Copy for Pointer<Tag>
impl<Tag: Eq> Eq for Pointer<Tag>
impl<Tag> StructuralEq for Pointer<Tag>
impl<Tag> StructuralPartialEq for Pointer<Tag>
Auto Trait Implementations
impl<Tag> RefUnwindSafe for Pointer<Tag> where
Tag: RefUnwindSafe,
impl<Tag> Send for Pointer<Tag> where
Tag: Send,
impl<Tag> Sync for Pointer<Tag> where
Tag: Sync,
impl<Tag> Unpin for Pointer<Tag> where
Tag: Unpin,
impl<Tag> UnwindSafe for Pointer<Tag> where
Tag: UnwindSafe,
Blanket Implementations
sourceimpl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for T where
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for T where
T: Copy,
fn allocate_on(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter(
arena: &'a Arena<'tcx>,
iter: impl IntoIterator<Item = T>
) -> &'a mut [T]ⓘNotable traits for &'_ [u8]impl<'_> Read for &'_ [u8]impl<'_> Write for &'_ mut [u8]
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Ctxt, T> DepNodeParams<Ctxt> for T where
Ctxt: DepContext,
T: for<'a> HashStable<StableHashingContext<'a>> + Debug,
impl<Ctxt, T> DepNodeParams<Ctxt> for T where
Ctxt: DepContext,
T: for<'a> HashStable<StableHashingContext<'a>> + Debug,
default fn fingerprint_style() -> FingerprintStyle
sourcedefault fn to_fingerprint(&self, tcx: Ctxt) -> Fingerprint
default fn to_fingerprint(&self, tcx: Ctxt) -> Fingerprint
This method turns the parameters of a DepNodeConstructor into an opaque Fingerprint to be used in DepNode. Not all DepNodeParams support being turned into a Fingerprint (they don’t need to if the corresponding DepNode is anonymous). Read more
default fn to_debug_str(&self, Ctxt) -> String
sourcedefault fn recover(Ctxt, &DepNode<<Ctxt as DepContext>::DepKind>) -> Option<T>
default fn recover(Ctxt, &DepNode<<Ctxt as DepContext>::DepKind>) -> Option<T>
This method tries to recover the query key from the given DepNode
,
something which is needed when forcing DepNode
s during red-green
evaluation. The query system will only call this method if
fingerprint_style()
is not FingerprintStyle::Opaque
.
It is always valid to return None
here, in which case incremental
compilation will treat the query as having changed instead of forcing it. Read more
sourceimpl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<'a, T> Captures<'a> for T where
T: ?Sized,
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.