Enum miri::interpret::ConstValue
source · [−]pub enum ConstValue<'tcx> {
Scalar(Scalar<AllocId>),
ZeroSized,
Slice {
data: ConstAllocation<'tcx, AllocId, ()>,
start: usize,
end: usize,
},
ByRef {
alloc: ConstAllocation<'tcx, AllocId, ()>,
offset: Size,
},
}
Expand description
Represents a constant value in Rust. Scalar
and Slice
are optimizations for
array length computations, enum discriminants and the pattern matching logic.
Variants
Scalar(Scalar<AllocId>)
Used only for types with layout::abi::Scalar
ABI.
Not using the enum Value
to encode that this must not be Uninit
.
ZeroSized
Only used for ZSTs.
Slice
Used only for &[u8]
and &str
ByRef
Fields
alloc: ConstAllocation<'tcx, AllocId, ()>
The backing memory of the value, may contain more memory than needed for just the value
in order to share ConstAllocation
s between values
offset: Size
Offset into alloc
A value not represented/representable by Scalar
or Slice
Auto Trait Implementations
impl<'tcx> RefUnwindSafe for ConstValue<'tcx>
impl<'tcx> Send for ConstValue<'tcx>
impl<'tcx> Sync for ConstValue<'tcx>
impl<'tcx> Unpin for ConstValue<'tcx>
impl<'tcx> UnwindSafe for ConstValue<'tcx>
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: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes
Size for each variant:
Scalar
: 24 bytesZeroSized
: 0 bytesSlice
: 24 bytesByRef
: 16 bytes