struct OpsemInhabitedCtx<'tcx> {
tcx: TyCtxt<'tcx>,
typing_env: TypingEnv<'tcx>,
seen: Option<FxHashSet<DefId>>,
stop_at_ref: bool,
}Expand description
Context for computing whether a type is inhabited on the opsem level.
See is_opsem_inhabited above for the spec of what we compute.
Fields§
§tcx: TyCtxt<'tcx>§typing_env: TypingEnv<'tcx>§seen: Option<FxHashSet<DefId>>IDs of ADTs that have been encountered in the current stack.
It’s None unless we are inside the is_opsem_inhabited_raw query,
which is only invoked for more complex types.
stop_at_ref: boolIf an ADT is encountered recursively within itself, then stop_at_ref
is set to true, and then any nested references are considered inhabited.
Implementations§
Source§impl<'tcx> OpsemInhabitedCtx<'tcx>
impl<'tcx> OpsemInhabitedCtx<'tcx>
Sourcefn is_inhabited_ty(&mut self, ty: Ty<'tcx>) -> bool
fn is_inhabited_ty(&mut self, ty: Ty<'tcx>) -> bool
See is_opsem_inhabited above for the spec of what we compute.
fn is_inhabited_adt_ty(&mut self, ty: Ty<'tcx>) -> bool
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for OpsemInhabitedCtx<'tcx>
impl<'tcx> !Send for OpsemInhabitedCtx<'tcx>
impl<'tcx> !Sync for OpsemInhabitedCtx<'tcx>
impl<'tcx> !UnwindSafe for OpsemInhabitedCtx<'tcx>
impl<'tcx> DynSend for OpsemInhabitedCtx<'tcx>
impl<'tcx> DynSync for OpsemInhabitedCtx<'tcx>
impl<'tcx> Freeze for OpsemInhabitedCtx<'tcx>
impl<'tcx> Unpin for OpsemInhabitedCtx<'tcx>
impl<'tcx> UnsafeUnpin for OpsemInhabitedCtx<'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
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
impl<T> ErasedDestructor for Twhere
T: 'static,
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<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> 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> ⓘ
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: 72 bytes