[−][src]Struct rustc_mir::transform::check_consts::resolver::TransferFunction
A Visitor that propagates qualifs between locals. This defines the transfer function of
FlowSensitiveAnalysis.
This transfer does nothing when encountering an indirect assignment. Consumers should rely on
the MaybeMutBorrowedLocals dataflow pass to see if a Local may have become qualified via
an indirect assignment or function call.
Fields
ccx: &'a ConstCx<'mir, 'tcx>qualifs_per_local: &'a mut BitSet<Local>_qualif: PhantomData<Q>Implementations
impl<Q, 'a, 'mir, 'tcx> TransferFunction<'a, 'mir, 'tcx, Q> where
Q: Qualif, [src]
Q: Qualif,
fn new(
ccx: &'a ConstCx<'mir, 'tcx>,
qualifs_per_local: &'a mut BitSet<Local>
) -> Self[src]
ccx: &'a ConstCx<'mir, 'tcx>,
qualifs_per_local: &'a mut BitSet<Local>
) -> Self
fn initialize_state(&mut self)[src]
fn assign_qualif_direct(&mut self, place: &Place<'tcx>, value: bool)[src]
fn apply_call_return_effect(
&mut self,
_block: BasicBlock,
_func: &Operand<'tcx>,
_args: &[Operand<'tcx>],
return_place: Place<'tcx>
)[src]
&mut self,
_block: BasicBlock,
_func: &Operand<'tcx>,
_args: &[Operand<'tcx>],
return_place: Place<'tcx>
)
Trait Implementations
impl<Q, 'tcx, '_, '_> Visitor<'tcx> for TransferFunction<'_, '_, 'tcx, Q> where
Q: Qualif, [src]
Q: Qualif,
fn visit_operand(&mut self, operand: &Operand<'tcx>, location: Location)[src]
fn visit_assign(
&mut self,
place: &Place<'tcx>,
rvalue: &Rvalue<'tcx>,
location: Location
)[src]
&mut self,
place: &Place<'tcx>,
rvalue: &Rvalue<'tcx>,
location: Location
)
fn visit_terminator(
&mut self,
terminator: &Terminator<'tcx>,
location: Location
)[src]
&mut self,
terminator: &Terminator<'tcx>,
location: Location
)
fn visit_body(&mut self, body: &Body<'tcx>)[src]
fn visit_basic_block_data(
&mut self,
block: BasicBlock,
data: &BasicBlockData<'tcx>
)[src]
&mut self,
block: BasicBlock,
data: &BasicBlockData<'tcx>
)
fn visit_source_scope_data(&mut self, scope_data: &SourceScopeData<'tcx>)[src]
fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location)[src]
fn visit_assert_message(
&mut self,
msg: &AssertKind<Operand<'tcx>>,
location: Location
)[src]
&mut self,
msg: &AssertKind<Operand<'tcx>>,
location: Location
)
fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location)[src]
fn visit_ascribe_user_ty(
&mut self,
place: &Place<'tcx>,
variance: &Variance,
user_ty: &UserTypeProjection,
location: Location
)[src]
&mut self,
place: &Place<'tcx>,
variance: &Variance,
user_ty: &UserTypeProjection,
location: Location
)
fn visit_coverage(&mut self, coverage: &Coverage, location: Location)[src]
fn visit_retag(
&mut self,
kind: &RetagKind,
place: &Place<'tcx>,
location: Location
)[src]
&mut self,
kind: &RetagKind,
place: &Place<'tcx>,
location: Location
)
fn visit_place(
&mut self,
place: &Place<'tcx>,
context: PlaceContext,
location: Location
)[src]
&mut self,
place: &Place<'tcx>,
context: PlaceContext,
location: Location
)
fn visit_projection(
&mut self,
local: Local,
projection: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
context: PlaceContext,
location: Location
)[src]
&mut self,
local: Local,
projection: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
context: PlaceContext,
location: Location
)
fn visit_projection_elem(
&mut self,
local: Local,
proj_base: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
elem: ProjectionElem<Local, &'tcx TyS<'tcx>>,
context: PlaceContext,
location: Location
)[src]
&mut self,
local: Local,
proj_base: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
elem: ProjectionElem<Local, &'tcx TyS<'tcx>>,
context: PlaceContext,
location: Location
)
fn super_place(
&mut self,
place: &Place<'tcx>,
context: PlaceContext,
location: Location
)[src]
&mut self,
place: &Place<'tcx>,
context: PlaceContext,
location: Location
)
fn super_projection(
&mut self,
local: Local,
projection: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
context: PlaceContext,
location: Location
)[src]
&mut self,
local: Local,
projection: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
context: PlaceContext,
location: Location
)
fn super_projection_elem(
&mut self,
_local: Local,
_proj_base: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
elem: ProjectionElem<Local, &'tcx TyS<'tcx>>,
_context: PlaceContext,
location: Location
)[src]
&mut self,
_local: Local,
_proj_base: &[ProjectionElem<Local, &'tcx TyS<'tcx>>],
elem: ProjectionElem<Local, &'tcx TyS<'tcx>>,
_context: PlaceContext,
location: Location
)
fn visit_constant(&mut self, constant: &Constant<'tcx>, location: Location)[src]
fn visit_span(&mut self, span: &Span)[src]
fn visit_source_info(&mut self, source_info: &SourceInfo)[src]
fn visit_ty(&mut self, ty: &'tcx TyS<'tcx>, TyContext)[src]
fn visit_user_type_projection(&mut self, ty: &UserTypeProjection)[src]
fn visit_user_type_annotation(
&mut self,
index: UserTypeAnnotationIndex,
ty: &CanonicalUserTypeAnnotation<'tcx>
)[src]
&mut self,
index: UserTypeAnnotationIndex,
ty: &CanonicalUserTypeAnnotation<'tcx>
)
fn visit_region(&mut self, region: &&'tcx RegionKind, Location)[src]
fn visit_const(&mut self, constant: &&'tcx Const<'tcx>, Location)[src]
fn visit_substs(&mut self, substs: &&'tcx List<GenericArg<'tcx>>, Location)[src]
fn visit_local_decl(&mut self, local: Local, local_decl: &LocalDecl<'tcx>)[src]
fn visit_var_debug_info(&mut self, var_debug_info: &VarDebugInfo<'tcx>)[src]
fn visit_local(
&mut self,
_local: &Local,
_context: PlaceContext,
_location: Location
)[src]
&mut self,
_local: &Local,
_context: PlaceContext,
_location: Location
)
fn visit_source_scope(&mut self, scope: &SourceScope)[src]
fn super_body(&mut self, body: &Body<'tcx>)[src]
fn super_basic_block_data(
&mut self,
block: BasicBlock,
data: &BasicBlockData<'tcx>
)[src]
&mut self,
block: BasicBlock,
data: &BasicBlockData<'tcx>
)
fn super_source_scope_data(&mut self, scope_data: &SourceScopeData<'tcx>)[src]
fn super_statement(&mut self, statement: &Statement<'tcx>, location: Location)[src]
fn super_assign(
&mut self,
place: &Place<'tcx>,
rvalue: &Rvalue<'tcx>,
location: Location
)[src]
&mut self,
place: &Place<'tcx>,
rvalue: &Rvalue<'tcx>,
location: Location
)
fn super_terminator(
&mut self,
terminator: &Terminator<'tcx>,
location: Location
)[src]
&mut self,
terminator: &Terminator<'tcx>,
location: Location
)
fn super_assert_message(
&mut self,
msg: &AssertKind<Operand<'tcx>>,
location: Location
)[src]
&mut self,
msg: &AssertKind<Operand<'tcx>>,
location: Location
)
fn super_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location)[src]
fn super_operand(&mut self, operand: &Operand<'tcx>, location: Location)[src]
fn super_ascribe_user_ty(
&mut self,
place: &Place<'tcx>,
_variance: &Variance,
user_ty: &UserTypeProjection,
location: Location
)[src]
&mut self,
place: &Place<'tcx>,
_variance: &Variance,
user_ty: &UserTypeProjection,
location: Location
)
fn super_coverage(&mut self, _coverage: &Coverage, _location: Location)[src]
fn super_retag(
&mut self,
_kind: &RetagKind,
place: &Place<'tcx>,
location: Location
)[src]
&mut self,
_kind: &RetagKind,
place: &Place<'tcx>,
location: Location
)
fn super_local_decl(&mut self, local: Local, local_decl: &LocalDecl<'tcx>)[src]
fn super_var_debug_info(&mut self, var_debug_info: &VarDebugInfo<'tcx>)[src]
fn super_source_scope(&mut self, _scope: &SourceScope)[src]
fn super_constant(&mut self, constant: &Constant<'tcx>, location: Location)[src]
fn super_span(&mut self, _span: &Span)[src]
fn super_source_info(&mut self, source_info: &SourceInfo)[src]
fn super_user_type_projection(&mut self, _ty: &UserTypeProjection)[src]
fn super_user_type_annotation(
&mut self,
_index: UserTypeAnnotationIndex,
ty: &CanonicalUserTypeAnnotation<'tcx>
)[src]
&mut self,
_index: UserTypeAnnotationIndex,
ty: &CanonicalUserTypeAnnotation<'tcx>
)
fn super_ty(&mut self, _ty: &'tcx TyS<'tcx>)[src]
fn super_region(&mut self, _region: &&'tcx RegionKind)[src]
fn super_const(&mut self, _const: &&'tcx Const<'tcx>)[src]
fn super_substs(&mut self, _substs: &&'tcx List<GenericArg<'tcx>>)[src]
fn visit_location(&mut self, body: &Body<'tcx>, location: Location)[src]
Auto Trait Implementations
impl<'a, 'mir, 'tcx, Q> !RefUnwindSafe for TransferFunction<'a, 'mir, 'tcx, Q>
impl<'a, 'mir, 'tcx, Q> !Send for TransferFunction<'a, 'mir, 'tcx, Q>
impl<'a, 'mir, 'tcx, Q> !Sync for TransferFunction<'a, 'mir, 'tcx, Q>
impl<'a, 'mir, 'tcx, Q> Unpin for TransferFunction<'a, 'mir, 'tcx, Q> where
Q: Unpin,
'mir: 'a,
'tcx: 'a,
Q: Unpin,
'mir: 'a,
'tcx: 'a,
impl<'a, 'mir, 'tcx, Q> !UnwindSafe for TransferFunction<'a, 'mir, 'tcx, Q>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub 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.