struct ProvisionalCacheEntry<'tcx> {
stack_depth: Option<StackDepth>,
with_inductive_stack: Option<DetachedEntry<'tcx>>,
with_coinductive_stack: Option<DetachedEntry<'tcx>>,
}Expand description
Stores the stack depth of a currently evaluated goal and already computed results for goals which depend on other goals still on the stack.
The provisional result may depend on whether the stack above it is inductive or coinductive. Because of this, we store separate provisional results for each case. If an provisional entry is not applicable, it may be the case that we already have provisional result while computing a goal. In this case we prefer the provisional result to potentially avoid fixpoint iterations. See tests/ui/traits/next-solver/cycles/mixed-cycles-2.rs for an example.
The provisional cache can theoretically result in changes to the observable behavior, see tests/ui/traits/next-solver/cycles/provisional-cache-impacts-behavior.rs.
Fields§
§stack_depth: Option<StackDepth>§with_inductive_stack: Option<DetachedEntry<'tcx>>§with_coinductive_stack: Option<DetachedEntry<'tcx>>Implementations§
Trait Implementations§
source§impl<'tcx> Default for ProvisionalCacheEntry<'tcx>
impl<'tcx> Default for ProvisionalCacheEntry<'tcx>
source§fn default() -> ProvisionalCacheEntry<'tcx>
fn default() -> ProvisionalCacheEntry<'tcx>
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for ProvisionalCacheEntry<'tcx>
impl<'tcx> Send for ProvisionalCacheEntry<'tcx>
impl<'tcx> Sync for ProvisionalCacheEntry<'tcx>
impl<'tcx> Unpin for ProvisionalCacheEntry<'tcx>
impl<'tcx> !UnwindSafe for ProvisionalCacheEntry<'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
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: 104 bytes