1
Fork 0

Rollup merge of #84923 - estebank:as_cache_key-once, r=petrochenkov

Only compute Obligation `cache_key` once  in `register_obligation_at`
This commit is contained in:
Dylan DPC 2021-05-06 13:30:58 +02:00 committed by GitHub
commit b5f40df95c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -336,12 +336,13 @@ impl<O: ForestObligation> ObligationForest<O> {
// Returns Err(()) if we already know this obligation failed. // Returns Err(()) if we already know this obligation failed.
fn register_obligation_at(&mut self, obligation: O, parent: Option<usize>) -> Result<(), ()> { fn register_obligation_at(&mut self, obligation: O, parent: Option<usize>) -> Result<(), ()> {
if self.done_cache.contains(&obligation.as_cache_key()) { let cache_key = obligation.as_cache_key();
if self.done_cache.contains(&cache_key) {
debug!("register_obligation_at: ignoring already done obligation: {:?}", obligation); debug!("register_obligation_at: ignoring already done obligation: {:?}", obligation);
return Ok(()); return Ok(());
} }
match self.active_cache.entry(obligation.as_cache_key()) { match self.active_cache.entry(cache_key.clone()) {
Entry::Occupied(o) => { Entry::Occupied(o) => {
let node = &mut self.nodes[*o.get()]; let node = &mut self.nodes[*o.get()];
if let Some(parent_index) = parent { if let Some(parent_index) = parent {
@ -365,7 +366,7 @@ impl<O: ForestObligation> ObligationForest<O> {
&& self && self
.error_cache .error_cache
.get(&obligation_tree_id) .get(&obligation_tree_id)
.map(|errors| errors.contains(&obligation.as_cache_key())) .map(|errors| errors.contains(&cache_key))
.unwrap_or(false); .unwrap_or(false);
if already_failed { if already_failed {