Struct rustc_infer::infer::error_reporting::sub_relations::SubRelations
source · pub struct SubRelations {
map: FxHashMap<TyVid, SubId>,
table: UnificationTableStorage<SubId>,
}
Expand description
When reporting ambiguity errors, we sometimes want to treat all inference vars which are subtypes of each others as if they are equal. For this case we compute the transitive closure of our subtype obligations here.
E.g. when encountering ambiguity errors, we want to suggest specifying some method argument or to add a type annotation to a local variable. Because subtyping cannot change the shape of a type, it’s fine if the cause of the ambiguity error is only related to the suggested variable via subtyping.
Even for something like let x = returns_arg(); x.method();
the
type of x
is only a supertype of the argument of returns_arg
. We
still want to suggest specifying the type of the argument.
Fields§
§map: FxHashMap<TyVid, SubId>
§table: UnificationTableStorage<SubId>
Implementations§
source§impl SubRelations
impl SubRelations
Trait Implementations§
source§impl Default for SubRelations
impl Default for SubRelations
source§fn default() -> SubRelations
fn default() -> SubRelations
Auto Trait Implementations§
impl DynSend for SubRelations
impl DynSync for SubRelations
impl Freeze for SubRelations
impl RefUnwindSafe for SubRelations
impl Send for SubRelations
impl Sync for SubRelations
impl Unpin for SubRelations
impl UnwindSafe for SubRelations
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
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
§impl<T> Filterable for T
impl<T> Filterable for T
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<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
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§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: 56 bytes