Struct rustc_hir_typeck::cast::CastCheck
source · pub struct CastCheck<'tcx> {
expr: &'tcx Expr<'tcx>,
expr_ty: Ty<'tcx>,
expr_span: Span,
cast_ty: Ty<'tcx>,
cast_span: Span,
span: Span,
pub constness: Constness,
}
Expand description
Reifies a cast check to be checked once we have full type information for a function context.
Fields§
§expr: &'tcx Expr<'tcx>
The expression whose value is being casted
expr_ty: Ty<'tcx>
The source type for the cast expression
expr_span: Span
§cast_ty: Ty<'tcx>
The target type. That is, the type we are casting to.
cast_span: Span
§span: Span
§constness: Constness
whether the cast is made in a const context or not.
Implementations§
source§impl<'a, 'tcx> CastCheck<'tcx>
impl<'a, 'tcx> CastCheck<'tcx>
pub fn new(
fcx: &FnCtxt<'a, 'tcx>,
expr: &'tcx Expr<'tcx>,
expr_ty: Ty<'tcx>,
cast_ty: Ty<'tcx>,
cast_span: Span,
span: Span,
constness: Constness
) -> Result<CastCheck<'tcx>, ErrorGuaranteed>
fn report_cast_error(&self, fcx: &FnCtxt<'a, 'tcx>, e: CastError)
fn report_cast_to_unsized_type(&self, fcx: &FnCtxt<'a, 'tcx>) -> ErrorGuaranteed
fn trivial_cast_lint(&self, fcx: &FnCtxt<'a, 'tcx>)
pub fn check(self, fcx: &FnCtxt<'a, 'tcx>)
sourcepub fn do_check(&self, fcx: &FnCtxt<'a, 'tcx>) -> Result<CastKind, CastError>
pub fn do_check(&self, fcx: &FnCtxt<'a, 'tcx>) -> Result<CastKind, CastError>
Checks a cast, and report an error if one exists. In some cases, this can return Ok and create type errors in the fcx rather than returning directly. coercion-cast is handled in check instead of here.
fn check_ptr_ptr_cast(
&self,
fcx: &FnCtxt<'a, 'tcx>,
m_expr: TypeAndMut<'tcx>,
m_cast: TypeAndMut<'tcx>
) -> Result<CastKind, CastError>
fn check_fptr_ptr_cast(
&self,
fcx: &FnCtxt<'a, 'tcx>,
m_cast: TypeAndMut<'tcx>
) -> Result<CastKind, CastError>
fn check_ptr_addr_cast(
&self,
fcx: &FnCtxt<'a, 'tcx>,
m_expr: TypeAndMut<'tcx>
) -> Result<CastKind, CastError>
fn check_ref_cast(
&self,
fcx: &FnCtxt<'a, 'tcx>,
m_expr: TypeAndMut<'tcx>,
m_cast: TypeAndMut<'tcx>
) -> Result<CastKind, CastError>
fn check_addr_ptr_cast(
&self,
fcx: &FnCtxt<'a, 'tcx>,
m_cast: TypeAndMut<'tcx>
) -> Result<CastKind, CastError>
fn try_coercion_cast(
&self,
fcx: &FnCtxt<'a, 'tcx>
) -> Result<(), TypeError<'tcx>>
fn cenum_impl_drop_lint(&self, fcx: &FnCtxt<'a, 'tcx>)
fn lossy_provenance_ptr2int_lint(&self, fcx: &FnCtxt<'a, 'tcx>, t_c: IntTy)
fn fuzzy_provenance_int2ptr_lint(&self, fcx: &FnCtxt<'a, 'tcx>)
Trait Implementations§
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for CastCheck<'tcx>
impl<'tcx> !Send for CastCheck<'tcx>
impl<'tcx> !Sync for CastCheck<'tcx>
impl<'tcx> Unpin for CastCheck<'tcx>
impl<'tcx> !UnwindSafe for CastCheck<'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: 56 bytes