Make Session.plugin_registrar_fn and Session.derive_registrar_fn thread-safe
This commit is contained in:
parent
27adb31fcc
commit
e82b6c42b4
3 changed files with 8 additions and 8 deletions
|
@ -71,8 +71,8 @@ pub struct Session {
|
||||||
pub parse_sess: ParseSess,
|
pub parse_sess: ParseSess,
|
||||||
/// For a library crate, this is always none
|
/// For a library crate, this is always none
|
||||||
pub entry_fn: Once<Option<(NodeId, Span, config::EntryFnType)>>,
|
pub entry_fn: Once<Option<(NodeId, Span, config::EntryFnType)>>,
|
||||||
pub plugin_registrar_fn: Cell<Option<ast::NodeId>>,
|
pub plugin_registrar_fn: Once<Option<ast::NodeId>>,
|
||||||
pub derive_registrar_fn: Cell<Option<ast::NodeId>>,
|
pub derive_registrar_fn: Once<Option<ast::NodeId>>,
|
||||||
pub default_sysroot: Option<PathBuf>,
|
pub default_sysroot: Option<PathBuf>,
|
||||||
/// The name of the root source file of the crate, in the local file system.
|
/// The name of the root source file of the crate, in the local file system.
|
||||||
/// `None` means that there is no source file.
|
/// `None` means that there is no source file.
|
||||||
|
@ -1094,8 +1094,8 @@ pub fn build_session_(
|
||||||
parse_sess: p_s,
|
parse_sess: p_s,
|
||||||
// For a library crate, this is always none
|
// For a library crate, this is always none
|
||||||
entry_fn: Once::new(),
|
entry_fn: Once::new(),
|
||||||
plugin_registrar_fn: Cell::new(None),
|
plugin_registrar_fn: Once::new(),
|
||||||
derive_registrar_fn: Cell::new(None),
|
derive_registrar_fn: Once::new(),
|
||||||
default_sysroot,
|
default_sysroot,
|
||||||
local_crate_source_file,
|
local_crate_source_file,
|
||||||
working_dir,
|
working_dir,
|
||||||
|
|
|
@ -157,12 +157,12 @@ fn reachable_non_generics_provider<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if let Some(id) = tcx.sess.derive_registrar_fn.get() {
|
if let Some(id) = *tcx.sess.derive_registrar_fn.get() {
|
||||||
let def_id = tcx.hir.local_def_id(id);
|
let def_id = tcx.hir.local_def_id(id);
|
||||||
reachable_non_generics.insert(def_id, SymbolExportLevel::C);
|
reachable_non_generics.insert(def_id, SymbolExportLevel::C);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(id) = tcx.sess.plugin_registrar_fn.get() {
|
if let Some(id) = *tcx.sess.plugin_registrar_fn.get() {
|
||||||
let def_id = tcx.hir.local_def_id(id);
|
let def_id = tcx.hir.local_def_id(id);
|
||||||
reachable_non_generics.insert(def_id, SymbolExportLevel::C);
|
reachable_non_generics.insert(def_id, SymbolExportLevel::C);
|
||||||
}
|
}
|
||||||
|
|
|
@ -244,11 +244,11 @@ fn compute_symbol_name<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, instance: Instance
|
||||||
let node_id = tcx.hir.as_local_node_id(def_id);
|
let node_id = tcx.hir.as_local_node_id(def_id);
|
||||||
|
|
||||||
if let Some(id) = node_id {
|
if let Some(id) = node_id {
|
||||||
if tcx.sess.plugin_registrar_fn.get() == Some(id) {
|
if *tcx.sess.plugin_registrar_fn.get() == Some(id) {
|
||||||
let disambiguator = tcx.sess.local_crate_disambiguator();
|
let disambiguator = tcx.sess.local_crate_disambiguator();
|
||||||
return tcx.sess.generate_plugin_registrar_symbol(disambiguator);
|
return tcx.sess.generate_plugin_registrar_symbol(disambiguator);
|
||||||
}
|
}
|
||||||
if tcx.sess.derive_registrar_fn.get() == Some(id) {
|
if *tcx.sess.derive_registrar_fn.get() == Some(id) {
|
||||||
let disambiguator = tcx.sess.local_crate_disambiguator();
|
let disambiguator = tcx.sess.local_crate_disambiguator();
|
||||||
return tcx.sess.generate_derive_registrar_symbol(disambiguator);
|
return tcx.sess.generate_derive_registrar_symbol(disambiguator);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue