From 006f9b2f5616ad970cb0f5102ec50e02ef2dd379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= Date: Sun, 1 Apr 2018 08:27:46 +0200 Subject: [PATCH] Make Session.injected_panic_runtime thread-safe --- src/librustc/middle/dependency_format.rs | 4 ++-- src/librustc/session/mod.rs | 4 ++-- src/librustc_metadata/creader.rs | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/librustc/middle/dependency_format.rs b/src/librustc/middle/dependency_format.rs index f7dfc3c33c0..e7fc8d633c8 100644 --- a/src/librustc/middle/dependency_format.rs +++ b/src/librustc/middle/dependency_format.rs @@ -223,7 +223,7 @@ fn calculate_type<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, // // Things like allocators and panic runtimes may not have been activated // quite yet, so do so here. - activate_injected_dep(sess.injected_panic_runtime.get(), &mut ret, + activate_injected_dep(*sess.injected_panic_runtime.get(), &mut ret, &|cnum| tcx.is_panic_runtime(cnum)); activate_injected_allocator(sess, &mut ret); @@ -302,7 +302,7 @@ fn attempt_static<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> Option>, pub allocator_kind: Once>, - pub injected_panic_runtime: Cell>, + pub injected_panic_runtime: Once>, /// Map from imported macro spans (which consist of /// the localized span for the macro body) to the @@ -1107,7 +1107,7 @@ pub fn build_session_( next_node_id: OneThread::new(Cell::new(NodeId::new(1))), injected_allocator: Once::new(), allocator_kind: Once::new(), - injected_panic_runtime: Cell::new(None), + injected_panic_runtime: Once::new(), imported_macro_spans: OneThread::new(RefCell::new(HashMap::new())), incr_comp_session: OneThread::new(RefCell::new(IncrCompSession::NotInitialized)), ignored_attr_names: ich::compute_ignored_attr_names(), diff --git a/src/librustc_metadata/creader.rs b/src/librustc_metadata/creader.rs index 06baea53cd5..34d9f47bac3 100644 --- a/src/librustc_metadata/creader.rs +++ b/src/librustc_metadata/creader.rs @@ -614,6 +614,7 @@ impl<'a> CrateLoader<'a> { }); if !any_non_rlib { info!("panic runtime injection skipped, only generating rlib"); + self.sess.injected_panic_runtime.set(None); return } @@ -646,6 +647,7 @@ impl<'a> CrateLoader<'a> { // we just don't need one at all, then we're done here and there's // nothing else to do. if !needs_panic_runtime || runtime_found { + self.sess.injected_panic_runtime.set(None); return }