pub(crate) struct PathFacts {
pub reenter: bool,
pub split_transmute_asserted: bool,
pub alias_hazard_accepted: bool,
pub has_checked_bounds: bool,
pub saw_next_discriminant: bool,
}Expand description
Per-path facts, read afterwards by the property checker.
Most flags are latched at most once during path execution (a contract fact
or a recognized discriminant / bounds check); reenter is instead derived
from the input path in VmState::new. They are per-path state, not
per-step: once set they are never cleared within a path. (has_checked_bounds
is additionally accumulated across checkpoints by the engine, which reads
it back into the next path’s flags.)
Fields§
§reenter: boolWhether the current path re-enters a block (loop-unrolled), which lets the checker exempt the unrolled iteration’s “second drop”.
split_transmute_asserted: boolWhether a SplitTransmute contract was asserted by the caller.
alias_hazard_accepted: boolWhether an Alias hazard was accepted via the caller’s contract.
has_checked_bounds: boolWhether a ChecksIndexBoundsDisjoint call was processed in any checkpoint of this function (accumulated across checkpoints).
saw_next_discriminant: boolSet once the path evaluated an Iterator::next discriminant whose
variant was known symbolically.
Trait Implementations§
Auto Trait Implementations§
impl DynSend for PathFacts
impl DynSync for PathFacts
impl Freeze for PathFacts
impl RefUnwindSafe for PathFacts
impl Send for PathFacts
impl Sync for PathFacts
impl Unpin for PathFacts
impl UnsafeUnpin for PathFacts
impl UnwindSafe for PathFacts
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