Skip to content

Commit 873c83b

Browse files
committed
Extract try_move_finished_goal_to_global_cache from try_finalize_goal
1 parent 44a2388 commit 873c83b

File tree

1 file changed

+34
-23
lines changed
  • compiler/rustc_trait_selection/src/solve/search_graph

1 file changed

+34
-23
lines changed

compiler/rustc_trait_selection/src/solve/search_graph/mod.rs

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ impl<'tcx> SearchGraph<'tcx> {
133133
let cache = &mut self.provisional_cache;
134134
let provisional_entry_index = *cache.lookup_table.get(&goal).unwrap();
135135
let provisional_entry = &mut cache.entries[provisional_entry_index];
136-
let depth = provisional_entry.depth;
137136
// We eagerly update the response in the cache here. If we have to reevaluate
138137
// this goal we use the new response when hitting a cycle, and we definitely
139138
// want to access the final response whenever we look at the cache.
@@ -157,29 +156,41 @@ impl<'tcx> SearchGraph<'tcx> {
157156
self.stack.push(StackElem { goal, has_been_used: false });
158157
false
159158
} else {
160-
// If not, we're done with this goal.
161-
//
162-
// Check whether that this goal doesn't depend on a goal deeper on the stack
163-
// and if so, move it and all nested goals to the global cache.
164-
//
165-
// Note that if any nested goal were to depend on something deeper on the stack,
166-
// this would have also updated the depth of the current goal.
167-
if depth == self.stack.next_index() {
168-
for (i, entry) in cache.entries.drain_enumerated(provisional_entry_index.index()..)
169-
{
170-
let actual_index = cache.lookup_table.remove(&entry.goal);
171-
debug_assert_eq!(Some(i), actual_index);
172-
debug_assert!(entry.depth == depth);
173-
cache::try_move_finished_goal_to_global_cache(
174-
tcx,
175-
&mut self.overflow_data,
176-
&self.stack,
177-
entry.goal,
178-
entry.response,
179-
);
180-
}
181-
}
159+
self.try_move_finished_goal_to_global_cache(tcx, &goal);
182160
true
183161
}
184162
}
163+
164+
pub(super) fn try_move_finished_goal_to_global_cache(
165+
&mut self,
166+
tcx: TyCtxt<'tcx>,
167+
goal: &CanonicalGoal<'tcx>,
168+
) {
169+
let cache = &mut self.provisional_cache;
170+
let provisional_entry_index = *cache.lookup_table.get(goal).unwrap();
171+
let provisional_entry = &mut cache.entries[provisional_entry_index];
172+
let depth = provisional_entry.depth;
173+
174+
// If not, we're done with this goal.
175+
//
176+
// Check whether that this goal doesn't depend on a goal deeper on the stack
177+
// and if so, move it and all nested goals to the global cache.
178+
//
179+
// Note that if any nested goal were to depend on something deeper on the stack,
180+
// this would have also updated the depth of the current goal.
181+
if depth == self.stack.next_index() {
182+
for (i, entry) in cache.entries.drain_enumerated(provisional_entry_index.index()..) {
183+
let actual_index = cache.lookup_table.remove(&entry.goal);
184+
debug_assert_eq!(Some(i), actual_index);
185+
debug_assert!(entry.depth == depth);
186+
cache::try_move_finished_goal_to_global_cache(
187+
tcx,
188+
&mut self.overflow_data,
189+
&self.stack,
190+
entry.goal,
191+
entry.response,
192+
);
193+
}
194+
}
195+
}
185196
}

0 commit comments

Comments
 (0)