pub(crate) struct AllocFacts<'z3, 'tcx> {
pub dead: bool,
pub liveness: Option<Region<'tcx>>,
pub for_each: ForEachFacts<'z3, 'tcx>,
}Expand description
Per-allocation lifecycle facts (dead/liveness/for_each), kept apart
from the allocation’s shape metadata and parent edge so identity/layout
and facts are separated at the type level. The content facts
(readability, C-string/UTF-8 trust) live on ContentFacts instead.
Fields§
§dead: boolWhether the allocation has been freed (StorageDead / Drop).
liveness: Option<Region<'tcx>>The region this external allocation is assumed alive for, via an
Alive(p, 'a) contract/invariant (or 'static for ValidCStr/Allocated
params/'static data). Only consulted for external allocations, whose
memory is owned by the caller (so dead carries no liveness guarantee):
the checker rejects a use that demands a longer region than this. None
means no assumption — an external allocation then fails Alive unless
grounded in a live reference; a VM-owned allocation is alive while
!dead and never sets this.
for_each: ForEachFacts<'z3, 'tcx>Uniform facts about this allocation’s pointer elements, established by
x.iter() for_each invariants (Typed/Align/Allocated).
Trait Implementations§
Source§impl<'z3, 'tcx> Clone for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> Clone for AllocFacts<'z3, 'tcx>
Source§impl<'z3, 'tcx> Debug for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> Debug for AllocFacts<'z3, 'tcx>
Auto Trait Implementations§
impl<'z3, 'tcx> !DynSend for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> !DynSync for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> !RefUnwindSafe for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> !Send for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> !Sync for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> !UnwindSafe for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> Freeze for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> Unpin for AllocFacts<'z3, 'tcx>
impl<'z3, 'tcx> UnsafeUnpin for AllocFacts<'z3, 'tcx>
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