diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2019-11-12 16:36:12 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-12 16:36:12 +0900 |
| commit | dfd11229b3fa9959e99a7bbce7069a081274870b (patch) | |
| tree | cf0f0b40783b341ea9bdc2763533c9863609391c /src | |
| parent | cde56373946aa3e9ea0ab349264d691bdff061a4 (diff) | |
| parent | 2c34f384d4d2289e9c83000c01e8a4f98486e8ec (diff) | |
| download | rust-dfd11229b3fa9959e99a7bbce7069a081274870b.tar.gz rust-dfd11229b3fa9959e99a7bbce7069a081274870b.zip | |
Rollup merge of #66276 - Mark-Simulacrum:sess-code-stats, r=nikomatsakis
Move lock into CodeStats Prevent (theoretical) accidental too-long borrows by ensuring only encapsulated locking.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/session/code_stats.rs | 12 | ||||
| -rw-r--r-- | src/librustc/session/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc/ty/layout.rs | 14 | ||||
| -rw-r--r-- | src/librustc_driver/lib.rs | 2 |
4 files changed, 16 insertions, 14 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 92e8e92d02a..b6638a287b8 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>, diff --git a/src/librustc/ty/layout.rs b/src/librustc/ty/layout.rs index e5f22277f8e..972452601dd 100644 --- a/src/librustc/ty/layout.rs +++ b/src/librustc/ty/layout.rs @@ -1614,13 +1614,13 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> { // (delay format until we actually need it) let record = |kind, packed, opt_discr_size, variants| { let type_desc = format!("{:?}", layout.ty); - self.tcx.sess.code_stats.borrow_mut().record_type_size(kind, - type_desc, - layout.align.abi, - layout.size, - packed, - opt_discr_size, - variants); + self.tcx.sess.code_stats.record_type_size(kind, + type_desc, + layout.align.abi, + layout.size, + packed, + opt_discr_size, + variants); }; let adt_def = match layout.ty.kind { diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index f2da4ae71f5..10bc6599e75 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -393,7 +393,7 @@ pub fn run_compiler( mem::drop(compiler.global_ctxt()?.take()); if sess.opts.debugging_opts.print_type_sizes { - sess.code_stats.borrow().print_type_sizes(); + sess.code_stats.print_type_sizes(); } compiler.link()?; |
