Struct rustc_const_eval::transform::validate::TypeChecker
source · struct TypeChecker<'a, 'tcx> {
when: &'a str,
body: &'a Body<'tcx>,
tcx: TyCtxt<'tcx>,
param_env: ParamEnv<'tcx>,
mir_phase: MirPhase,
reachable_blocks: BitSet<BasicBlock>,
storage_liveness: ResultsCursor<'a, 'tcx, MaybeStorageLive<'static>>,
place_cache: Vec<PlaceRef<'tcx>>,
value_cache: Vec<u128>,
}Fields§
§when: &'a str§body: &'a Body<'tcx>§tcx: TyCtxt<'tcx>§param_env: ParamEnv<'tcx>§mir_phase: MirPhase§reachable_blocks: BitSet<BasicBlock>§storage_liveness: ResultsCursor<'a, 'tcx, MaybeStorageLive<'static>>§place_cache: Vec<PlaceRef<'tcx>>§value_cache: Vec<u128>Implementations§
source§impl<'a, 'tcx> TypeChecker<'a, 'tcx>
impl<'a, 'tcx> TypeChecker<'a, 'tcx>
fn fail(&self, location: Location, msg: impl AsRef<str>)
fn check_edge(&self, location: Location, bb: BasicBlock, edge_kind: EdgeKind)
sourcefn mir_assign_valid_types(&self, src: Ty<'tcx>, dest: Ty<'tcx>) -> bool
fn mir_assign_valid_types(&self, src: Ty<'tcx>, dest: Ty<'tcx>) -> bool
Check if src can be assigned into dest. This is not precise, it will accept some incorrect assignments.
Trait Implementations§
source§impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx>
impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx>
fn visit_local(&mut self, local: Local, context: PlaceContext, location: Location)
fn visit_operand(&mut self, operand: &Operand<'tcx>, location: Location)
fn visit_projection_elem(
&mut self,
local: Local,
proj_base: &[PlaceElem<'tcx>],
elem: PlaceElem<'tcx>,
context: PlaceContext,
location: Location
)
fn visit_place(
&mut self,
place: &Place<'tcx>,
cntxt: PlaceContext,
location: Location
)
fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location)
fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location)
fn visit_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location)
fn visit_source_scope(&mut self, scope: SourceScope)
fn visit_body(&mut self, body: &Body<'tcx>)
fn visit_basic_block_data(
&mut self,
block: BasicBlock,
data: &BasicBlockData<'tcx>
)
fn visit_source_scope_data(&mut self, scope_data: &SourceScopeData<'tcx>)
fn visit_assign(
&mut self,
place: &Place<'tcx>,
rvalue: &Rvalue<'tcx>,
location: Location
)
fn visit_assert_message(
&mut self,
msg: &AssertKind<Operand<'tcx>>,
location: Location
)
fn visit_ascribe_user_ty(
&mut self,
place: &Place<'tcx>,
variance: Variance,
user_ty: &UserTypeProjection,
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_projection(
&mut self,
place_ref: PlaceRef<'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_ty(&mut self, ty: Ty<'tcx>, _: TyContext)
fn visit_user_type_projection(&mut self, ty: &UserTypeProjection)
fn visit_user_type_annotation(
&mut self,
index: UserTypeAnnotationIndex,
ty: &CanonicalUserTypeAnnotation<'tcx>
)
fn visit_region(&mut self, region: Region<'tcx>, _: Location)
fn visit_substs(&mut self, substs: &&'tcx List<GenericArg<'tcx>>, _: Location)
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 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<'a, 'tcx> !RefUnwindSafe for TypeChecker<'a, 'tcx>
impl<'a, 'tcx> !Send for TypeChecker<'a, 'tcx>
impl<'a, 'tcx> !Sync for TypeChecker<'a, 'tcx>
impl<'a, 'tcx> Unpin for TypeChecker<'a, 'tcx>where
'tcx: 'a,
impl<'a, 'tcx> !UnwindSafe for TypeChecker<'a, '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: 256 bytes