diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index 81012754a771..9ab9635c9eda 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -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>, + pub crate_disambiguator: Once, features: Once, @@ -202,10 +202,7 @@ impl From<&'static lint::Lint> for DiagnosticMessageId { 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>( @@ -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(), diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 8372cbdd5df8..4776f516eac4 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -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,