rustc_hir_analysis::check::wfcheck

Struct WfCheckingCtxt

source
pub(super) struct WfCheckingCtxt<'a, 'tcx> {
    pub(super) ocx: ObligationCtxt<'a, 'tcx, FulfillmentError<'tcx>>,
    span: Span,
    body_def_id: LocalDefId,
    param_env: ParamEnv<'tcx>,
}

Fields§

§ocx: ObligationCtxt<'a, 'tcx, FulfillmentError<'tcx>>§span: Span§body_def_id: LocalDefId§param_env: ParamEnv<'tcx>

Implementations§

source§

impl<'tcx> WfCheckingCtxt<'_, 'tcx>

source

fn tcx(&self) -> TyCtxt<'tcx>

source

fn normalize<T>(&self, span: Span, loc: Option<WellFormedLoc>, value: T) -> T
where T: TypeFoldable<TyCtxt<'tcx>>,

source

fn register_wf_obligation( &self, span: Span, loc: Option<WellFormedLoc>, arg: GenericArg<'tcx>, )

source§

impl<'tcx> WfCheckingCtxt<'_, 'tcx>

source

fn check_false_global_bounds(&mut self)

Feature gates RFC 2056 – trivial bounds, checking for global bounds that aren’t true.

Methods from Deref<Target = ObligationCtxt<'a, 'tcx, FulfillmentError<'tcx>>>§

source

pub fn register_obligation(&self, obligation: Obligation<'tcx, Predicate<'tcx>>)

source

pub fn register_obligations( &self, obligations: impl IntoIterator<Item = Obligation<'tcx, Predicate<'tcx>>>, )

source

pub fn register_infer_ok_obligations<T>(&self, infer_ok: InferOk<'tcx, T>) -> T

source

pub fn register_bound( &self, cause: ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, ty: Ty<'tcx>, def_id: DefId, )

Requires that ty must implement the trait with def_id in the given environment. This trait must not have any type parameters (except for Self).

source

pub fn normalize<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: T, ) -> T
where T: TypeFoldable<TyCtxt<'tcx>>,

source

pub fn eq<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<TyCtxt<'tcx>>>
where T: ToTrace<'tcx>,

source

pub fn eq_trace<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, trace: TypeTrace<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<TyCtxt<'tcx>>>
where T: Relate<TyCtxt<'tcx>>,

source

pub fn sub<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<TyCtxt<'tcx>>>
where T: ToTrace<'tcx>,

Checks whether expected is a subtype of actual: expected <: actual.

source

pub fn relate<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, variance: Variance, expected: T, actual: T, ) -> Result<(), TypeError<TyCtxt<'tcx>>>
where T: ToTrace<'tcx>,

source

pub fn sup<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T, ) -> Result<(), TypeError<TyCtxt<'tcx>>>
where T: ToTrace<'tcx>,

Checks whether expected is a supertype of actual: expected :> actual.

source

pub fn select_where_possible(&self) -> Vec<E>

source

pub fn select_all_or_error(&self) -> Vec<E>

source

pub fn assumed_wf_types_and_report_errors( &self, param_env: ParamEnv<'tcx>, def_id: LocalDefId, ) -> Result<IndexSet<Ty<'tcx>, BuildHasherDefault<FxHasher>>, ErrorGuaranteed>

source

pub fn make_canonicalized_query_response<T>( &self, inference_vars: CanonicalVarValues<TyCtxt<'tcx>>, answer: T, ) -> Result<&'tcx Canonical<TyCtxt<'tcx>, QueryResponse<'tcx, T>>, NoSolution>
where T: Debug + TypeFoldable<TyCtxt<'tcx>>, Canonical<TyCtxt<'tcx>, QueryResponse<'tcx, T>>: ArenaAllocatable<'tcx>,

source

pub fn assumed_wf_types( &self, param_env: ParamEnv<'tcx>, def_id: LocalDefId, ) -> Result<IndexSet<Ty<'tcx>, BuildHasherDefault<FxHasher>>, Vec<E>>

source

pub fn deeply_normalize<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: T, ) -> Result<T, Vec<E>>
where T: TypeFoldable<TyCtxt<'tcx>>,

source

pub fn structurally_normalize( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: Ty<'tcx>, ) -> Result<Ty<'tcx>, Vec<E>>

Trait Implementations§

source§

impl<'a, 'tcx> Deref for WfCheckingCtxt<'a, 'tcx>

source§

type Target = ObligationCtxt<'a, 'tcx, FulfillmentError<'tcx>>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<'a, 'tcx> !DynSend for WfCheckingCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !DynSync for WfCheckingCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !Freeze for WfCheckingCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !RefUnwindSafe for WfCheckingCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !Send for WfCheckingCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !Sync for WfCheckingCtxt<'a, 'tcx>

§

impl<'a, 'tcx> Unpin for WfCheckingCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !UnwindSafe for WfCheckingCtxt<'a, 'tcx>

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T, R> CollectAndApply<T, R> for T

source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

source§

type Output = R

source§

impl<T> Filterable for T

source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
source§

impl<P> IntoQueryParam<P> for P

source§

impl<T> MaybeResult<T> for T

source§

type Error = !

source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

fn upcast(self, interner: I) -> U

source§

impl<I, T> UpcastFrom<I, T> for T

source§

fn upcast_from(from: T, _tcx: I) -> T

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

impl<T> ErasedDestructor for T
where T: 'static,

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