[−][src]Struct polonius_engine::AllFacts
The "facts" which are the basis of the NLL borrow analysis.
Fields
borrow_region: Vec<(T::Origin, T::Loan, T::Point)>
borrow_region(origin, loan, point)
-- the origin
may refer to data
from loan
starting at point
(this is usually the
point after a borrow rvalue)
universal_region: Vec<T::Origin>
universal_region(origin)
-- this is a "free region" within fn body
cfg_edge: Vec<(T::Point, T::Point)>
cfg_edge(point1, point2)
for each edge point1 -> point2
in the control flow
killed: Vec<(T::Loan, T::Point)>
killed(loan, point)
when some prefix of the path borrowed at loan
is assigned at point
outlives: Vec<(T::Origin, T::Origin, T::Point)>
outlives(origin1, origin2, point)
when we require origin1@point: origin2@point
invalidates: Vec<(T::Point, T::Loan)>
invalidates(point, loan)
when the loan
is invalidated at point
var_used: Vec<(T::Variable, T::Point)>
var_used(var, point)
when the variable var
is used for anything but a drop at point
var_defined: Vec<(T::Variable, T::Point)>
var_defined(var, point)
when the variable var
is overwritten at point
var_drop_used: Vec<(T::Variable, T::Point)>
var_used(var, point)
when the variable var
is used in a drop at point
var_uses_region: Vec<(T::Variable, T::Origin)>
var_uses_region(var, origin)
when the type of var
includes the origin
var_drops_region: Vec<(T::Variable, T::Origin)>
var_drops_region(var, origin)
when the type of var
includes the origin
and uses
it when dropping
child: Vec<(T::Path, T::Path)>
child(path1, path2)
when the path path1
is the direct or transitive child
of path2
, e.g. child(x.y, x)
, child(x.y.z, x.y)
, child(x.y.z, x)
would all be true if there was a path like x.y.z
.
path_belongs_to_var: Vec<(T::Path, T::Variable)>
path_belongs_to_var(path, var)
the root path path
starting in variable var
.
initialized_at: Vec<(T::Path, T::Point)>
initialized_at(path, point)
when the path
was initialized at point
point
. This fact is only emitted for a prefix path
, and not for the
implicit initialization of all of path
's children. E.g. a statement like
x.y = 3
at point
would give the fact initialized_at(x.y, point)
(but
neither initialized_at(x.y.z, point)
nor initialized_at(x, point)
).
moved_out_at: Vec<(T::Path, T::Point)>
moved_out_at(path, point)
when the path
was moved at point
. The
same logic is applied as for initialized_at
above.
path_accessed_at: Vec<(T::Path, T::Point)>
path_accessed_at(path, point)
when the path
was accessed at point
point
. The same logic as for initialized_at
and moved_out_at
applies.
known_subset: Vec<(T::Origin, T::Origin)>
These reflect the 'a: 'b
relations that are either declared by the user on function
declarations or which are inferred via implied bounds.
For example: fn foo<'a, 'b: 'a, 'c>(x: &'c &'a u32)
would have two entries:
- one for the user-supplied subset
'b: 'a
- and one for the
'a: 'c
implied bound from thex
parameter, (note that the transitive relation'b: 'c
is not necessarily included explicitly, but rather inferred by polonius).
placeholder: Vec<(T::Origin, T::Loan)>
placeholder(origin, loan)
describes a placeholder origin
, with its associated
placeholder loan
.
Trait Implementations
impl<T: Clone + FactTypes> Clone for AllFacts<T> where
T::Origin: Clone,
T::Loan: Clone,
T::Point: Clone,
T::Origin: Clone,
T::Point: Clone,
T::Point: Clone,
T::Loan: Clone,
T::Point: Clone,
T::Origin: Clone,
T::Origin: Clone,
T::Point: Clone,
T::Point: Clone,
T::Loan: Clone,
T::Variable: Clone,
T::Point: Clone,
T::Variable: Clone,
T::Point: Clone,
T::Variable: Clone,
T::Point: Clone,
T::Variable: Clone,
T::Origin: Clone,
T::Variable: Clone,
T::Origin: Clone,
T::Path: Clone,
T::Path: Clone,
T::Path: Clone,
T::Variable: Clone,
T::Path: Clone,
T::Point: Clone,
T::Path: Clone,
T::Point: Clone,
T::Path: Clone,
T::Point: Clone,
T::Origin: Clone,
T::Origin: Clone,
T::Origin: Clone,
T::Loan: Clone,
[src]
T::Origin: Clone,
T::Loan: Clone,
T::Point: Clone,
T::Origin: Clone,
T::Point: Clone,
T::Point: Clone,
T::Loan: Clone,
T::Point: Clone,
T::Origin: Clone,
T::Origin: Clone,
T::Point: Clone,
T::Point: Clone,
T::Loan: Clone,
T::Variable: Clone,
T::Point: Clone,
T::Variable: Clone,
T::Point: Clone,
T::Variable: Clone,
T::Point: Clone,
T::Variable: Clone,
T::Origin: Clone,
T::Variable: Clone,
T::Origin: Clone,
T::Path: Clone,
T::Path: Clone,
T::Path: Clone,
T::Variable: Clone,
T::Path: Clone,
T::Point: Clone,
T::Path: Clone,
T::Point: Clone,
T::Path: Clone,
T::Point: Clone,
T::Origin: Clone,
T::Origin: Clone,
T::Origin: Clone,
T::Loan: Clone,
impl<T: FactTypes> Default for AllFacts<T>
[src]
impl<T: Debug + FactTypes> Debug for AllFacts<T> where
T::Origin: Debug,
T::Loan: Debug,
T::Point: Debug,
T::Origin: Debug,
T::Point: Debug,
T::Point: Debug,
T::Loan: Debug,
T::Point: Debug,
T::Origin: Debug,
T::Origin: Debug,
T::Point: Debug,
T::Point: Debug,
T::Loan: Debug,
T::Variable: Debug,
T::Point: Debug,
T::Variable: Debug,
T::Point: Debug,
T::Variable: Debug,
T::Point: Debug,
T::Variable: Debug,
T::Origin: Debug,
T::Variable: Debug,
T::Origin: Debug,
T::Path: Debug,
T::Path: Debug,
T::Path: Debug,
T::Variable: Debug,
T::Path: Debug,
T::Point: Debug,
T::Path: Debug,
T::Point: Debug,
T::Path: Debug,
T::Point: Debug,
T::Origin: Debug,
T::Origin: Debug,
T::Origin: Debug,
T::Loan: Debug,
[src]
T::Origin: Debug,
T::Loan: Debug,
T::Point: Debug,
T::Origin: Debug,
T::Point: Debug,
T::Point: Debug,
T::Loan: Debug,
T::Point: Debug,
T::Origin: Debug,
T::Origin: Debug,
T::Point: Debug,
T::Point: Debug,
T::Loan: Debug,
T::Variable: Debug,
T::Point: Debug,
T::Variable: Debug,
T::Point: Debug,
T::Variable: Debug,
T::Point: Debug,
T::Variable: Debug,
T::Origin: Debug,
T::Variable: Debug,
T::Origin: Debug,
T::Path: Debug,
T::Path: Debug,
T::Path: Debug,
T::Variable: Debug,
T::Path: Debug,
T::Point: Debug,
T::Path: Debug,
T::Point: Debug,
T::Path: Debug,
T::Point: Debug,
T::Origin: Debug,
T::Origin: Debug,
T::Origin: Debug,
T::Loan: Debug,
Auto Trait Implementations
impl<T> Send for AllFacts<T> where
<T as FactTypes>::Loan: Send,
<T as FactTypes>::Origin: Send,
<T as FactTypes>::Path: Send,
<T as FactTypes>::Point: Send,
<T as FactTypes>::Variable: Send,
<T as FactTypes>::Loan: Send,
<T as FactTypes>::Origin: Send,
<T as FactTypes>::Path: Send,
<T as FactTypes>::Point: Send,
<T as FactTypes>::Variable: Send,
impl<T> Sync for AllFacts<T> where
<T as FactTypes>::Loan: Sync,
<T as FactTypes>::Origin: Sync,
<T as FactTypes>::Path: Sync,
<T as FactTypes>::Point: Sync,
<T as FactTypes>::Variable: Sync,
<T as FactTypes>::Loan: Sync,
<T as FactTypes>::Origin: Sync,
<T as FactTypes>::Path: Sync,
<T as FactTypes>::Point: Sync,
<T as FactTypes>::Variable: Sync,
impl<T> Unpin for AllFacts<T> where
<T as FactTypes>::Loan: Unpin,
<T as FactTypes>::Origin: Unpin,
<T as FactTypes>::Path: Unpin,
<T as FactTypes>::Point: Unpin,
<T as FactTypes>::Variable: Unpin,
<T as FactTypes>::Loan: Unpin,
<T as FactTypes>::Origin: Unpin,
<T as FactTypes>::Path: Unpin,
<T as FactTypes>::Point: Unpin,
<T as FactTypes>::Variable: Unpin,
impl<T> UnwindSafe for AllFacts<T> where
<T as FactTypes>::Loan: UnwindSafe,
<T as FactTypes>::Origin: UnwindSafe,
<T as FactTypes>::Path: UnwindSafe,
<T as FactTypes>::Point: UnwindSafe,
<T as FactTypes>::Variable: UnwindSafe,
<T as FactTypes>::Loan: UnwindSafe,
<T as FactTypes>::Origin: UnwindSafe,
<T as FactTypes>::Path: UnwindSafe,
<T as FactTypes>::Point: UnwindSafe,
<T as FactTypes>::Variable: UnwindSafe,
impl<T> RefUnwindSafe for AllFacts<T> where
<T as FactTypes>::Loan: RefUnwindSafe,
<T as FactTypes>::Origin: RefUnwindSafe,
<T as FactTypes>::Path: RefUnwindSafe,
<T as FactTypes>::Point: RefUnwindSafe,
<T as FactTypes>::Variable: RefUnwindSafe,
<T as FactTypes>::Loan: RefUnwindSafe,
<T as FactTypes>::Origin: RefUnwindSafe,
<T as FactTypes>::Path: RefUnwindSafe,
<T as FactTypes>::Point: RefUnwindSafe,
<T as FactTypes>::Variable: RefUnwindSafe,
Blanket Implementations
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = !
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,