pub enum Immediate<Tag = AllocId> where
Tag: Provenance, {
Scalar(ScalarMaybeUninit<Tag>),
ScalarPair(ScalarMaybeUninit<Tag>, ScalarMaybeUninit<Tag>),
Uninit,
}Expand description
An Immediate represents a single immediate self-contained Rust value.
For optimization of a few very common cases, there is also a representation for a pair of
primitive values (ScalarPair). It allows Miri to avoid making allocations for checked binary
operations and wide pointers. This idea was taken from rustc’s codegen.
In particular, thanks to ScalarPair, arithmetic operations and casts can be entirely
defined on Immediate, and do not have to work with a Place.
Variants
Scalar(ScalarMaybeUninit<Tag>)
A single scalar value (must have initialized Scalar ABI).
FIXME: we also currently often use this for ZST.
ScalarMaybeUninit should reject ZST, and we should use Uninit for them instead.
ScalarPair(ScalarMaybeUninit<Tag>, ScalarMaybeUninit<Tag>)
A pair of two scalar value (must have ScalarPair ABI where both fields are
Scalar::Initialized).
Uninit
A value of fully uninitialized memory. Can have and size and layout.
Auto Trait Implementations
impl<Tag> RefUnwindSafe for Immediate<Tag> where
Tag: RefUnwindSafe,
impl<Tag> Send for Immediate<Tag> where
Tag: Send,
impl<Tag> Sync for Immediate<Tag> where
Tag: Sync,
impl<Tag> Unpin for Immediate<Tag> where
Tag: Unpin,
impl<Tag> UnwindSafe for Immediate<Tag> where
Tag: UnwindSafe,
Blanket Implementations
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
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
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.