struct LeakCheck<'me, 'tcx> {
    tcx: TyCtxt<'tcx>,
    outer_universe: UniverseIndex,
    mini_graph: &'me MiniGraph<'tcx>,
    rcc: &'me RegionConstraintCollector<'me, 'tcx>,
    scc_placeholders: IndexVec<LeakCheckScc, Option<PlaceholderRegion>>,
    scc_universes: IndexVec<LeakCheckScc, SccUniverse<'tcx>>,
}

Fields§

§tcx: TyCtxt<'tcx>§outer_universe: UniverseIndex§mini_graph: &'me MiniGraph<'tcx>§rcc: &'me RegionConstraintCollector<'me, 'tcx>§scc_placeholders: IndexVec<LeakCheckScc, Option<PlaceholderRegion>>§scc_universes: IndexVec<LeakCheckScc, SccUniverse<'tcx>>

Implementations§

source§

impl<'me, 'tcx> LeakCheck<'me, 'tcx>

source

fn new( tcx: TyCtxt<'tcx>, outer_universe: UniverseIndex, max_universe: UniverseIndex, mini_graph: &'me MiniGraph<'tcx>, rcc: &'me RegionConstraintCollector<'me, 'tcx> ) -> Self

source

fn assign_placeholder_values(&mut self) -> RelateResult<'tcx, ()>

Compute what placeholders (if any) each SCC must be equal to. Also compute the minimum universe of all the regions in each SCC.

source

fn assign_scc_value( &mut self, scc: LeakCheckScc, placeholder: PlaceholderRegion ) -> RelateResult<'tcx, ()>

source

fn propagate_scc_value(&mut self) -> RelateResult<'tcx, ()>

For each SCC S, iterate over each successor S1 where S: S1:

  • Compute Iterate over each SCC S and ensure that, for each S1 where S1: S, universe(S) <= universe(S1). This executes after assign_placeholder_values, so universe(S) is already the minimum universe of any of its direct constituents.
source

fn placeholder_error( &self, placeholder1: PlaceholderRegion, placeholder2: PlaceholderRegion ) -> TypeError<'tcx>

source

fn error( &self, placeholder: PlaceholderRegion, other_region: Region<'tcx> ) -> TypeError<'tcx>

Auto Trait Implementations§

§

impl<'me, 'tcx> !RefUnwindSafe for LeakCheck<'me, 'tcx>

§

impl<'me, 'tcx> !Send for LeakCheck<'me, 'tcx>

§

impl<'me, 'tcx> !Sync for LeakCheck<'me, 'tcx>

§

impl<'me, 'tcx> Unpin for LeakCheck<'me, 'tcx>

§

impl<'me, 'tcx> !UnwindSafe for LeakCheck<'me, 'tcx>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.

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: 80 bytes