struct ConstraintGeneration<'cg, 'tcx> {
infcx: &'cg InferCtxt<'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<'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§
source§impl<'cx, 'tcx> ConstraintGeneration<'cx, 'tcx>
impl<'cx, 'tcx> ConstraintGeneration<'cx, '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§
source§impl<'cg, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'tcx>
impl<'cg, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'tcx>
source§fn 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.
source§fn 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.
source§fn 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>, Ty<'tcx>>],
elem: ProjectionElem<Local, Ty<'tcx>, 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>, Ty<'tcx>>],
elem: ProjectionElem<Local, Ty<'tcx>, 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, 'tcx> !RefUnwindSafe for ConstraintGeneration<'cg, 'tcx>
impl<'cg, 'tcx> !Send for ConstraintGeneration<'cg, 'tcx>
impl<'cg, 'tcx> !Sync for ConstraintGeneration<'cg, 'tcx>
impl<'cg, 'tcx> Unpin for ConstraintGeneration<'cg, 'tcx>where
'tcx: 'cg,
impl<'cg, 'tcx> !UnwindSafe for ConstraintGeneration<'cg, 'tcx>
Blanket Implementations§
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