pub(crate) 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§
Source§impl<'a, 'tcx> CastCheck<'tcx>
impl<'a, 'tcx> CastCheck<'tcx>
pub(crate) 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<'tcx>)
fn report_cast_to_unsized_type(&self, fcx: &FnCtxt<'a, 'tcx>) -> ErrorGuaranteed
fn trivial_cast_lint(&self, fcx: &FnCtxt<'a, 'tcx>)
pub(crate) fn check(self, fcx: &FnCtxt<'a, 'tcx>)
Sourcefn do_check(&self, fcx: &FnCtxt<'a, 'tcx>) -> Result<CastKind, CastError<'tcx>>
fn do_check(&self, fcx: &FnCtxt<'a, 'tcx>) -> Result<CastKind, CastError<'tcx>>
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_src: TypeAndMut<'tcx>, m_dst: TypeAndMut<'tcx>, ) -> Result<CastKind, CastError<'tcx>>
fn check_fptr_ptr_cast( &self, fcx: &FnCtxt<'a, 'tcx>, m_cast: TypeAndMut<'tcx>, ) -> Result<CastKind, CastError<'tcx>>
fn check_ptr_addr_cast( &self, fcx: &FnCtxt<'a, 'tcx>, m_expr: TypeAndMut<'tcx>, ) -> Result<CastKind, CastError<'tcx>>
fn check_ref_cast( &self, fcx: &FnCtxt<'a, 'tcx>, m_expr: TypeAndMut<'tcx>, m_cast: TypeAndMut<'tcx>, ) -> Result<CastKind, CastError<'tcx>>
fn check_addr_ptr_cast( &self, fcx: &FnCtxt<'a, 'tcx>, m_cast: TypeAndMut<'tcx>, ) -> Result<CastKind, CastError<'tcx>>
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>)
Sourcefn try_suggest_collection_to_bool(
&self,
fcx: &FnCtxt<'a, 'tcx>,
err: &mut Diag<'_>,
)
fn try_suggest_collection_to_bool( &self, fcx: &FnCtxt<'a, 'tcx>, err: &mut Diag<'_>, )
Attempt to suggest using .is_empty
when trying to cast from a
collection type to a boolean.
Trait Implementations§
Auto Trait Implementations§
impl<'tcx> DynSend for CastCheck<'tcx>
impl<'tcx> DynSync for CastCheck<'tcx>
impl<'tcx> Freeze for CastCheck<'tcx>
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§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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