about summary refs log tree commit diff
path: root/src/librustc/session
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2019-11-10 11:48:47 -0500
committerMark Rousskov <mark.simulacrum@gmail.com>2019-11-10 11:48:47 -0500
commit2c34f384d4d2289e9c83000c01e8a4f98486e8ec (patch)
treeaf7679c9ac58914c94e7c4edd221e3da9e3f49c9 /src/librustc/session
parent86c28325ff813e5cf4d0cab320a7c9f6fb0766b8 (diff)
downloadrust-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.rs12
-rw-r--r--src/librustc/session/mod.rs2
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>,