diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-11-10 11:48:47 -0500 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-11-10 11:48:47 -0500 |
| commit | 2c34f384d4d2289e9c83000c01e8a4f98486e8ec (patch) | |
| tree | af7679c9ac58914c94e7c4edd221e3da9e3f49c9 /src/librustc/session | |
| parent | 86c28325ff813e5cf4d0cab320a7c9f6fb0766b8 (diff) | |
| download | rust-2c34f384d4d2289e9c83000c01e8a4f98486e8ec.tar.gz rust-2c34f384d4d2289e9c83000c01e8a4f98486e8ec.zip | |
Move lock into CodeStats
Prevent accidental too-long borrows by ensuring only encapsulated locking.
Diffstat (limited to 'src/librustc/session')
| -rw-r--r-- | src/librustc/session/code_stats.rs | 12 | ||||
| -rw-r--r-- | src/librustc/session/mod.rs | 2 |
2 files changed, 8 insertions, 6 deletions
diff --git a/src/librustc/session/code_stats.rs b/src/librustc/session/code_stats.rs index 0f535249b5e..5baf0c5948f 100644 --- a/src/librustc/session/code_stats.rs +++ b/src/librustc/session/code_stats.rs @@ -1,6 +1,7 @@ use rustc_target::abi::{Align, Size}; use rustc_data_structures::fx::{FxHashSet}; use std::cmp::{self, Ordering}; +use rustc_data_structures::sync::Lock; #[derive(Clone, PartialEq, Eq, Hash, Debug)] pub struct VariantInfo { @@ -44,13 +45,13 @@ pub struct TypeSizeInfo { pub variants: Vec<VariantInfo>, } -#[derive(PartialEq, Eq, Debug, Default)] +#[derive(Default)] pub struct CodeStats { - type_sizes: FxHashSet<TypeSizeInfo>, + type_sizes: Lock<FxHashSet<TypeSizeInfo>>, } impl CodeStats { - pub fn record_type_size<S: ToString>(&mut self, + pub fn record_type_size<S: ToString>(&self, kind: DataTypeKind, type_desc: S, align: Align, @@ -73,11 +74,12 @@ impl CodeStats { opt_discr_size: opt_discr_size.map(|s| s.bytes()), variants, }; - self.type_sizes.insert(info); + self.type_sizes.borrow_mut().insert(info); } pub fn print_type_sizes(&self) { - let mut sorted: Vec<_> = self.type_sizes.iter().collect(); + let type_sizes = self.type_sizes.borrow(); + let mut sorted: Vec<_> = type_sizes.iter().collect(); // Primary sort: large-to-small. // Secondary sort: description (dictionary order) diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index bab7ab89ce7..920438da0d6 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -124,7 +124,7 @@ pub struct Session { pub perf_stats: PerfStats, /// Data about code being compiled, gathered during compilation. - pub code_stats: Lock<CodeStats>, + pub code_stats: CodeStats, /// If `-zfuel=crate=n` is specified, `Some(crate)`. optimization_fuel_crate: Option<String>, |
