Struct rustc_trait_selection::solve::search_graph::StackEntry
source · struct StackEntry<'tcx> {
input: CanonicalInput<'tcx>,
available_depth: Limit,
reached_depth: StackDepth,
cycle_root_depth: StackDepth,
encountered_overflow: bool,
has_been_used: bool,
provisional_result: Option<QueryResult<'tcx>>,
cycle_participants: FxHashSet<CanonicalInput<'tcx>>,
}
Fields§
§input: CanonicalInput<'tcx>
§available_depth: Limit
§reached_depth: StackDepth
§cycle_root_depth: StackDepth
§encountered_overflow: bool
§has_been_used: bool
§provisional_result: Option<QueryResult<'tcx>>
Starts out as None
and gets set when rerunning this
goal in case we encounter a cycle.
cycle_participants: FxHashSet<CanonicalInput<'tcx>>
We put only the root goal of a coinductive cycle into the global cache.
If we were to use that result when later trying to prove another cycle participant, we can end up with unstable query results.
See tests/ui/new-solver/coinduction/incompleteness-unstable-result.rs for an example of where this is needed.
Trait Implementations§
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for StackEntry<'tcx>
impl<'tcx> !Send for StackEntry<'tcx>
impl<'tcx> !Sync for StackEntry<'tcx>
impl<'tcx> Unpin for StackEntry<'tcx>
impl<'tcx> !UnwindSafe for StackEntry<'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
Mutably borrows from an owned value. Read more
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: 144 bytes