Struct rustc_const_eval::transform::check_consts::check::Checker
source · pub struct Checker<'mir, 'tcx> {
ccx: &'mir ConstCx<'mir, 'tcx>,
qualifs: Qualifs<'mir, 'tcx>,
span: Span,
local_has_storage_dead: Option<BitSet<Local>>,
error_emitted: Option<ErrorGuaranteed>,
secondary_errors: Vec<Diagnostic>,
}
Fields§
§ccx: &'mir ConstCx<'mir, 'tcx>
§qualifs: Qualifs<'mir, 'tcx>
§span: Span
The span of the current statement.
local_has_storage_dead: Option<BitSet<Local>>
A set that stores for each local whether it has a StorageDead
for it somewhere.
error_emitted: Option<ErrorGuaranteed>
§secondary_errors: Vec<Diagnostic>
Implementations§
source§impl<'mir, 'tcx> Checker<'mir, 'tcx>
impl<'mir, 'tcx> Checker<'mir, 'tcx>
pub fn new(ccx: &'mir ConstCx<'mir, 'tcx>) -> Self
pub fn check_body(&mut self)
fn local_has_storage_dead(&mut self, local: Local) -> bool
pub fn qualifs_in_return_place(&mut self) -> ConstQualifs
sourcepub fn check_op(&mut self, op: impl NonConstOp<'tcx>)
pub fn check_op(&mut self, op: impl NonConstOp<'tcx>)
Emits an error if an expression cannot be evaluated in the current context.
sourcepub fn check_op_spanned<O: NonConstOp<'tcx>>(&mut self, op: O, span: Span)
pub fn check_op_spanned<O: NonConstOp<'tcx>>(&mut self, op: O, span: Span)
Emits an error at the given span
if an expression cannot be evaluated in the current
context.
fn check_static(&mut self, def_id: DefId, span: Span)
fn check_local_or_return_ty(&mut self, ty: Ty<'tcx>, local: Local)
fn check_mut_borrow(&mut self, local: Local, kind: BorrowKind)
Methods from Deref<Target = ConstCx<'mir, 'tcx>>§
pub fn def_id(&self) -> LocalDefId
sourcepub fn const_kind(&self) -> ConstContext
pub fn const_kind(&self) -> ConstContext
Returns the kind of const context this Item
represents (const
, static
, etc.).
Panics if this Item
is not const.
pub fn is_const_stable_const_fn(&self) -> bool
fn is_async(&self) -> bool
Trait Implementations§
source§impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx>
impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx>
fn visit_basic_block_data(&mut self, bb: BasicBlock, block: &BasicBlockData<'tcx>)
fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location)
fn visit_operand(&mut self, op: &Operand<'tcx>, location: Location)
fn visit_projection_elem(
&mut self,
place_local: Local,
proj_base: &[PlaceElem<'tcx>],
elem: PlaceElem<'tcx>,
context: PlaceContext,
location: Location
)
fn visit_source_info(&mut self, source_info: &SourceInfo)
fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location)
fn visit_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location)
fn visit_body(&mut self, body: &Body<'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_place(
&mut self,
place: &Place<'tcx>,
context: PlaceContext,
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>, 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_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 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<'mir, 'tcx> !RefUnwindSafe for Checker<'mir, 'tcx>
impl<'mir, 'tcx> !Send for Checker<'mir, 'tcx>
impl<'mir, 'tcx> !Sync for Checker<'mir, 'tcx>
impl<'mir, 'tcx> Unpin for Checker<'mir, 'tcx>where
'tcx: 'mir,
impl<'mir, 'tcx> !UnwindSafe for Checker<'mir, '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: 488 bytes