]> git.lizzy.rs Git - rust.git/commitdiff
Make Session.crate_disambiguator thread-safe
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Sun, 1 Apr 2018 06:23:38 +0000 (08:23 +0200)
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>
Tue, 10 Apr 2018 12:40:25 +0000 (14:40 +0200)
src/librustc/session/mod.rs
src/librustc_driver/driver.rs

index 81012754a7714caf4656b61140e0e3635a285f11..9ab9635c9eda32699ee39af09c2dd454cdbcb2cd 100644 (file)
@@ -99,7 +99,7 @@ pub struct Session {
     /// forms a unique global identifier for the crate. It is used to allow
     /// multiple crates with the same name to coexist. See the
     /// trans::back::symbol_names module for more information.
-    pub crate_disambiguator: RefCell<Option<CrateDisambiguator>>,
+    pub crate_disambiguator: Once<CrateDisambiguator>,
 
     features: Once<feature_gate::Features>,
 
@@ -202,10 +202,7 @@ fn from(lint: &'static lint::Lint) -> Self {
 
 impl Session {
     pub fn local_crate_disambiguator(&self) -> CrateDisambiguator {
-        match *self.crate_disambiguator.borrow() {
-            Some(value) => value,
-            None => bug!("accessing disambiguator before initialization"),
-        }
+        *self.crate_disambiguator.get()
     }
 
     pub fn struct_span_warn<'a, S: Into<MultiSpan>>(
@@ -1101,7 +1098,7 @@ pub fn build_session_(
         plugin_attributes: RefCell::new(Vec::new()),
         crate_types: RefCell::new(Vec::new()),
         dependency_formats: RefCell::new(FxHashMap()),
-        crate_disambiguator: RefCell::new(None),
+        crate_disambiguator: Once::new(),
         features: Once::new(),
         recursion_limit: Once::new(),
         type_length_limit: Once::new(),
index 8372cbdd5df8b31ba724987bd59fd3864adf4ba8..4776f516eac4954a7367a3b740e2222d647eeff4 100644 (file)
@@ -655,7 +655,7 @@ pub fn phase_2_configure_and_expand_inner<'a, F>(sess: &'a Session,
     *sess.crate_types.borrow_mut() = collect_crate_types(sess, &krate.attrs);
 
     let disambiguator = compute_crate_disambiguator(sess);
-    *sess.crate_disambiguator.borrow_mut() = Some(disambiguator);
+    sess.crate_disambiguator.set(disambiguator);
     rustc_incremental::prepare_session_directory(
         sess,
         &crate_name,