pub(crate) struct ValueFacts<'z3> {
pub non_null: bool,
pub init: bool,
pub in_bounds: bool,
pub align_n: Option<Int<'z3>>,
}Expand description
Value-level facts about a single symbolic value (nullness, alignment,
bounds, and whether it has been written). These travel with the value — a
VmValue leaves its allocation when passed as an operand or stashed in
InlineCtx::deferred_field_writes — so they live on the value, not the
allocation. The allocation-level counterpart to init is
ContentFacts::initialized, kept in sync by VmState::mark_initialized.
PartialEq/Eq are deliberately not derived: align_n is a Z3 AST
whose equality is structural (Z3_is_eq_ast), not semantic, so comparing
two ValueFacts would silently report semantically-equal values as
unequal.
Fields§
§non_null: bool§init: bool§in_bounds: bool§align_n: Option<Int<'z3>>If Some(n), the value’s term is known to satisfy z3_term % n == 0.
Set by alignment guards, Mul by power-of-two, and type alignment.
n is a Z3 term so that a generic type’s alignment (a symbolic
align_T) can be carried the same way as a concrete alignment.
Trait Implementations§
Source§impl<'z3> Clone for ValueFacts<'z3>
impl<'z3> Clone for ValueFacts<'z3>
Source§impl<'z3> Debug for ValueFacts<'z3>
impl<'z3> Debug for ValueFacts<'z3>
Source§impl<'z3> Default for ValueFacts<'z3>
impl<'z3> Default for ValueFacts<'z3>
Auto Trait Implementations§
impl<'z3> !DynSend for ValueFacts<'z3>
impl<'z3> !DynSync for ValueFacts<'z3>
impl<'z3> !Send for ValueFacts<'z3>
impl<'z3> !Sync for ValueFacts<'z3>
impl<'z3> Freeze for ValueFacts<'z3>
impl<'z3> RefUnwindSafe for ValueFacts<'z3>
impl<'z3> Unpin for ValueFacts<'z3>
impl<'z3> UnsafeUnpin for ValueFacts<'z3>
impl<'z3> UnwindSafe for ValueFacts<'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
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> ⓘ
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> ⓘ
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