pub(crate) enum OffsetKind<'z3> {
Field,
Element(Int<'z3>),
Byte,
}Expand description
The structure of a pointer’s byte offset, when it has one.
Each variant lets the verifier use a cheaper, more precise proof: Field
carries the “field in-bounds” guarantee (offset + size_of(field) <= size_of(container), e.g. Option::as_slice), and Element(k) tracks the
element index so InBound checks k + count <= slice_len linearly instead
of the non-linear byte form (k+count)·S <= len·S (undecidable in Z3 NIA
for a generic S).
Variants§
Field
Compile-time field offset (offset_of!), including a first field at 0.
Element(Int<'z3>)
Element index from element-strided arithmetic (ptr.add(k)); the byte
offset is element · S.
Byte
A byte-strided or otherwise unclassifiable offset (byte_add).
Trait Implementations§
Source§impl<'z3> Clone for OffsetKind<'z3>
impl<'z3> Clone for OffsetKind<'z3>
Auto Trait Implementations§
impl<'z3> !DynSend for OffsetKind<'z3>
impl<'z3> !DynSync for OffsetKind<'z3>
impl<'z3> !Send for OffsetKind<'z3>
impl<'z3> !Sync for OffsetKind<'z3>
impl<'z3> Freeze for OffsetKind<'z3>
impl<'z3> RefUnwindSafe for OffsetKind<'z3>
impl<'z3> Unpin for OffsetKind<'z3>
impl<'z3> UnsafeUnpin for OffsetKind<'z3>
impl<'z3> UnwindSafe for OffsetKind<'z3>
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more