From 66488a50f9752a87a6947f9284f5a3f6cb61301c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= Date: Sun, 1 Apr 2018 08:26:22 +0200 Subject: [PATCH] Make Session.dependency_formats thread-safe --- src/librustc/middle/dependency_format.rs | 3 ++- src/librustc/session/mod.rs | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/librustc/middle/dependency_format.rs b/src/librustc/middle/dependency_format.rs index e7055827c49..f7dfc3c33c0 100644 --- a/src/librustc/middle/dependency_format.rs +++ b/src/librustc/middle/dependency_format.rs @@ -94,13 +94,14 @@ pub enum Linkage { pub fn calculate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { let sess = &tcx.sess; - let mut fmts = sess.dependency_formats.borrow_mut(); + let mut fmts = FxHashMap(); for &ty in sess.crate_types.borrow().iter() { let linkage = calculate_type(tcx, ty); verify_ok(tcx, &linkage); fmts.insert(ty, linkage); } sess.abort_if_errors(); + sess.dependency_formats.set(fmts); } fn calculate_type<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index 499c45e28fe..55da5b921af 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -22,7 +22,7 @@ use session::search_paths::PathKind; use session::config::{DebugInfoLevel, OutputType}; use ty::tls; -use util::nodemap::{FxHashMap, FxHashSet}; +use util::nodemap::{FxHashSet}; use util::common::{duration_to_secs_str, ErrorReported}; use util::common::ProfileQueriesMsg; @@ -93,7 +93,7 @@ pub struct Session { pub plugin_llvm_passes: OneThread>>, pub plugin_attributes: OneThread>>, pub crate_types: Once>, - pub dependency_formats: RefCell, + pub dependency_formats: Once, /// The crate_disambiguator is constructed out of all the `-C metadata` /// arguments passed to the compiler. Its value together with the crate-name /// forms a unique global identifier for the crate. It is used to allow @@ -1097,7 +1097,7 @@ pub fn build_session_( plugin_llvm_passes: OneThread::new(RefCell::new(Vec::new())), plugin_attributes: OneThread::new(RefCell::new(Vec::new())), crate_types: Once::new(), - dependency_formats: RefCell::new(FxHashMap()), + dependency_formats: Once::new(), crate_disambiguator: Once::new(), features: Once::new(), recursion_limit: Once::new(), -- GitLab