diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-12-31 14:27:20 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2020-01-11 00:33:27 +0100 |
| commit | 4beeadda3c137c8c8d66ba6b1bb3fb0be9b37b86 (patch) | |
| tree | 0c57da4a4683bc35d96f2b56cad3c392f1997f05 | |
| parent | f3ce14479c5297521edfe70c8e4ef7c6d1a83536 (diff) | |
| download | rust-4beeadda3c137c8c8d66ba6b1bb3fb0be9b37b86.tar.gz rust-4beeadda3c137c8c8d66ba6b1bb3fb0be9b37b86.zip | |
Fix a deadlock
| -rw-r--r-- | src/librustc_mir/monomorphize/collector.rs | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/librustc_mir/monomorphize/collector.rs b/src/librustc_mir/monomorphize/collector.rs index 41fbfd22e50..422a1ccd9b5 100644 --- a/src/librustc_mir/monomorphize/collector.rs +++ b/src/librustc_mir/monomorphize/collector.rs @@ -194,7 +194,7 @@ use rustc_hir as hir; use rustc_hir::def_id::{DefId, DefIdMap, LOCAL_CRATE}; use rustc_hir::itemlikevisit::ItemLikeVisitor; use rustc_index::bit_set::GrowableBitSet; - +use smallvec::SmallVec; use std::iter; #[derive(PartialEq)] @@ -227,9 +227,7 @@ impl<'tcx> InliningMap<'tcx> { } } - fn record_accesses<I>(&mut self, source: MonoItem<'tcx>, new_targets: I) - where - I: Iterator<Item = (MonoItem<'tcx>, bool)> + ExactSizeIterator, + fn record_accesses(&mut self, source: MonoItem<'tcx>, new_targets: &[(MonoItem<'tcx>, bool)]) { assert!(!self.index.contains_key(&source)); @@ -240,9 +238,9 @@ impl<'tcx> InliningMap<'tcx> { self.targets.reserve(new_items_count); self.inlines.ensure(new_items_count_total); - for (i, (target, inline)) in new_targets.enumerate() { - self.targets.push(target); - if inline { + for (i, (target, inline)) in new_targets.iter().enumerate() { + self.targets.push(*target); + if *inline { self.inlines.insert(i + start_index); } } @@ -403,10 +401,12 @@ fn record_accesses<'tcx>( mono_item.instantiation_mode(tcx) == InstantiationMode::LocalCopy }; - let accesses = - callees.into_iter().map(|mono_item| (*mono_item, is_inlining_candidate(mono_item))); + let accesses: SmallVec<[_; 128]> = callees + .into_iter() + .map(|mono_item| (*mono_item, is_inlining_candidate(mono_item))) + .collect(); - inlining_map.lock_mut().record_accesses(caller, accesses); + inlining_map.lock_mut().record_accesses(caller, &accesses); } fn check_recursion_limit<'tcx>( |
