struct ConstraintGeneration<'cg, 'cx, 'tcx> {
infcx: &'cg InferCtxt<'cx, 'tcx>,
all_facts: &'cg mut Option<AllFacts>,
location_table: &'cg LocationTable,
liveness_constraints: &'cg mut LivenessValues<RegionVid>,
borrow_set: &'cg BorrowSet<'tcx>,
body: &'cg Body<'tcx>,
}
Expand description
’cg = the duration of the constraint generation process itself.
Fields
infcx: &'cg InferCtxt<'cx, 'tcx>
all_facts: &'cg mut Option<AllFacts>
location_table: &'cg LocationTable
liveness_constraints: &'cg mut LivenessValues<RegionVid>
borrow_set: &'cg BorrowSet<'tcx>
body: &'cg Body<'tcx>
Implementations
sourceimpl<'cx, 'cg, 'tcx> ConstraintGeneration<'cx, 'cg, 'tcx>
impl<'cx, 'cg, 'tcx> ConstraintGeneration<'cx, 'cg, 'tcx>
sourcefn add_regular_live_constraint<T>(&mut self, live_ty: T, location: Location)where
T: TypeVisitable<'tcx>,
fn add_regular_live_constraint<T>(&mut self, live_ty: T, location: Location)where
T: TypeVisitable<'tcx>,
Some variable with type live_ty
is “regular live” at
location
– i.e., it may be used later. This means that all
regions appearing in the type live_ty
must be live at
location
.
sourcefn record_killed_borrows_for_place(
&mut self,
place: Place<'tcx>,
location: Location
)
fn record_killed_borrows_for_place(
&mut self,
place: Place<'tcx>,
location: Location
)
When recording facts for Polonius, records the borrows on the specified place
as killed
. For example, when assigning to a local, or on a call’s return destination.
Trait Implementations
sourceimpl<'cg, 'cx, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'cx, 'tcx>
impl<'cg, 'cx, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'cx, 'tcx>
sourcefn visit_substs(&mut self, substs: &SubstsRef<'tcx>, location: Location)
fn visit_substs(&mut self, substs: &SubstsRef<'tcx>, location: Location)
We sometimes have substs
within an rvalue, or within a
call. Make them live at the location where they appear.
sourcefn visit_region(&mut self, region: Region<'tcx>, location: Location)
fn visit_region(&mut self, region: Region<'tcx>, location: Location)
We sometimes have region
within an rvalue, or within a
call. Make them live at the location where they appear.
sourcefn visit_ty(&mut self, ty: Ty<'tcx>, ty_context: TyContext)
fn visit_ty(&mut self, ty: Ty<'tcx>, ty_context: TyContext)
We sometimes have ty
within an rvalue, or within a
call. Make them live at the location where they appear.
fn visit_basic_block_data(&mut self, bb: BasicBlock, data: &BasicBlockData<'tcx>)
fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location)
fn visit_assign(
&mut self,
place: &Place<'tcx>,
rvalue: &Rvalue<'tcx>,
location: Location
)
fn visit_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location)
fn visit_ascribe_user_ty(
&mut self,
_place: &Place<'tcx>,
_variance: Variance,
_user_ty: &UserTypeProjection,
_location: Location
)
fn visit_body(&mut self, body: &Body<'tcx>)
fn visit_source_scope_data(&mut self, scope_data: &SourceScopeData<'tcx>)
fn visit_assert_message(
&mut self,
msg: &AssertKind<Operand<'tcx>>,
location: Location
)
fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location)
fn visit_operand(&mut self, operand: &Operand<'tcx>, location: Location)
fn visit_coverage(&mut self, coverage: &Coverage, location: Location)
fn visit_retag(&mut self, kind: RetagKind, place: &Place<'tcx>, location: Location)
fn visit_place(
&mut self,
place: &Place<'tcx>,
context: PlaceContext,
location: Location
)
fn visit_projection(
&mut self,
place_ref: PlaceRef<'tcx>,
context: PlaceContext,
location: Location
)
fn visit_projection_elem(
&mut self,
local: Local,
proj_base: &[ProjectionElem<Local, Ty<'tcx>>],
elem: ProjectionElem<Local, Ty<'tcx>>,
context: PlaceContext,
location: Location
)
fn super_place(
&mut self,
place: &Place<'tcx>,
context: PlaceContext,
location: Location
)
fn super_projection(
&mut self,
place_ref: PlaceRef<'tcx>,
context: PlaceContext,
location: Location
)
fn super_projection_elem(
&mut self,
_local: Local,
_proj_base: &[ProjectionElem<Local, Ty<'tcx>>],
elem: ProjectionElem<Local, Ty<'tcx>>,
_context: PlaceContext,
location: Location
)
fn visit_constant(&mut self, constant: &Constant<'tcx>, location: Location)
fn visit_span(&mut self, span: Span)
fn visit_source_info(&mut self, source_info: &SourceInfo)
fn visit_user_type_projection(&mut self, ty: &UserTypeProjection)
fn visit_user_type_annotation(
&mut self,
index: UserTypeAnnotationIndex,
ty: &CanonicalUserTypeAnnotation<'tcx>
)
fn visit_local_decl(&mut self, local: Local, local_decl: &LocalDecl<'tcx>)
fn visit_var_debug_info(&mut self, var_debug_info: &VarDebugInfo<'tcx>)
fn visit_local(
&mut self,
_local: Local,
_context: PlaceContext,
_location: Location
)
fn visit_source_scope(&mut self, scope: SourceScope)
fn super_body(&mut self, body: &Body<'tcx>)
fn super_basic_block_data(
&mut self,
block: BasicBlock,
data: &BasicBlockData<'tcx>
)
fn super_source_scope_data(&mut self, scope_data: &SourceScopeData<'tcx>)
fn super_statement(&mut self, statement: &Statement<'tcx>, location: Location)
fn super_assign(
&mut self,
place: &Place<'tcx>,
rvalue: &Rvalue<'tcx>,
location: Location
)
fn super_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location)
fn super_assert_message(
&mut self,
msg: &AssertKind<Operand<'tcx>>,
location: Location
)
fn super_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location)
fn super_operand(&mut self, operand: &Operand<'tcx>, location: Location)
fn super_ascribe_user_ty(
&mut self,
place: &Place<'tcx>,
_variance: Variance,
user_ty: &UserTypeProjection,
location: Location
)
fn super_coverage(&mut self, _coverage: &Coverage, _location: Location)
fn super_retag(
&mut self,
_kind: RetagKind,
place: &Place<'tcx>,
location: Location
)
fn super_local_decl(&mut self, local: Local, local_decl: &LocalDecl<'tcx>)
fn super_var_debug_info(&mut self, var_debug_info: &VarDebugInfo<'tcx>)
fn super_source_scope(&mut self, _scope: SourceScope)
fn super_constant(&mut self, constant: &Constant<'tcx>, location: Location)
fn super_span(&mut self, _span: Span)
fn super_source_info(&mut self, source_info: &SourceInfo)
fn super_user_type_projection(&mut self, _ty: &UserTypeProjection)
fn super_user_type_annotation(
&mut self,
_index: UserTypeAnnotationIndex,
ty: &CanonicalUserTypeAnnotation<'tcx>
)
fn super_ty(&mut self, _ty: Ty<'tcx>)
fn super_region(&mut self, _region: Region<'tcx>)
fn super_substs(&mut self, _substs: &&'tcx List<GenericArg<'tcx>>)
fn visit_location(&mut self, body: &Body<'tcx>, location: Location)
Auto Trait Implementations
impl<'cg, 'cx, 'tcx> !RefUnwindSafe for ConstraintGeneration<'cg, 'cx, 'tcx>
impl<'cg, 'cx, 'tcx> !Send for ConstraintGeneration<'cg, 'cx, 'tcx>
impl<'cg, 'cx, 'tcx> !Sync for ConstraintGeneration<'cg, 'cx, 'tcx>
impl<'cg, 'cx, 'tcx> Unpin for ConstraintGeneration<'cg, 'cx, 'tcx>where
'cx: 'cg,
'tcx: 'cg,
impl<'cg, 'cx, 'tcx> !UnwindSafe for ConstraintGeneration<'cg, 'cx, 'tcx>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 48 bytes