You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This test should fail as A: Unpin -> B: Inductive -> B: Unpin -> A: Unpin is an inductive cycle. However, the old solver reuses the provisional cache entry of the coinductive A: Unpin -> B: Unpin -> A: Unpin cycle for B: Unpin. Changing the order of where clauses on the A<T>: Unpin impl causes this test to correctly The only place we remove provisional entries is fn on_failure or when completely done with this cycle. Idk if and how you'd get an unsoundness from that, but this explains why the old solver is fast when handling complex auto trait cycles.
The text was updated successfully, but these errors were encountered:
lcnr
changed the title
old trait solver provisional cache does not changes in the cycle kind
old trait solver provisional cache does not handle changes in the cycle kind
Jul 9, 2024
This test should fail as
A: Unpin -> B: Inductive -> B: Unpin -> A: Unpin
is an inductive cycle. However, the old solver reuses the provisional cache entry of the coinductiveA: Unpin -> B: Unpin -> A: Unpin
cycle forB: Unpin
. Changing the order of where clauses on theA<T>: Unpin
impl causes this test to correctly The only place we remove provisional entries isfn on_failure
or when completely done with this cycle. Idk if and how you'd get an unsoundness from that, but this explains why the old solver is fast when handling complex auto trait cycles.It does hang during coherence when computing intercrate ambiguity causes. It recursively evaluates nested goals, but still returns
Ok(None)
, clearing the provisional cache.The text was updated successfully, but these errors were encountered: