pub(crate) struct ForEachFacts<'z3, 'tcx> {
pub target_ty: Option<Ty<'tcx>>,
pub aligned_ty: Option<Ty<'tcx>>,
pub allocated: Option<(Ty<'tcx>, Int<'z3>)>,
pub owning: bool,
}Expand description
Uniform facts about the pointer elements of a container, established by
x.iter() for_each invariants.
Each fact is a property every element pointer satisfies. The facts are anchored to the container’s allocation (not the container value) because a pointer loaded from the container resolves its provenance through this allocation, so the checker finds the fact via the loaded pointer’s provenance.
Fields§
§target_ty: Option<Ty<'tcx>>Typed(iter(), T): every element pointer points at a valid T.
aligned_ty: Option<Ty<'tcx>>Align(iter(), T): every element pointer is aligned to align_of(T).
allocated: Option<(Ty<'tcx>, Int<'z3>)>Allocated(iter(), T, n): every element pointer backs >= n T
elements (n may be symbolic).
owning: boolOwning(iter()): every element pointer is the sole owner of its
pointee (mutually non-aliasing). Established by the trusted invariant;
the aliasing check of the invariant itself is done by the alias
analysis, not by this flag.
Trait Implementations§
Source§impl<'z3, 'tcx> Clone for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> Clone for ForEachFacts<'z3, 'tcx>
Source§impl<'z3, 'tcx> Debug for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> Debug for ForEachFacts<'z3, 'tcx>
Auto Trait Implementations§
impl<'z3, 'tcx> !DynSend for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> !DynSync for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> !RefUnwindSafe for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> !Send for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> !Sync for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> !UnwindSafe for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> Freeze for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> Unpin for ForEachFacts<'z3, 'tcx>
impl<'z3, 'tcx> UnsafeUnpin for ForEachFacts<'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