pub struct CastCheck<'tcx> {
expr: &'tcx Expr<'tcx>,
expr_ty: Ty<'tcx>,
expr_span: Span,
cast_ty: Ty<'tcx>,
cast_span: Span,
span: Span,
}
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
Implementations
sourceimpl<'a, 'tcx> CastCheck<'tcx>
impl<'a, 'tcx> CastCheck<'tcx>
fn new(
fcx: &FnCtxt<'a, 'tcx>,
expr: &'tcx Expr<'tcx>,
expr_ty: Ty<'tcx>,
cast_ty: Ty<'tcx>,
cast_span: Span,
span: Span
) -> 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>)
fn report_object_unsafe_cast(&self, fcx: &FnCtxt<'a, 'tcx>, did: DefId)
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
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
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