Make untracked.cstore lockable so that resolution can still write to it when using TyCtxt
This commit is contained in:
parent
e8e227aec8
commit
ade3dceb38
9 changed files with 50 additions and 36 deletions
|
@ -36,7 +36,7 @@ use rustc_data_structures::profiling::SelfProfilerRef;
|
|||
use rustc_data_structures::sharded::{IntoPointer, ShardedHashMap};
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_data_structures::steal::Steal;
|
||||
use rustc_data_structures::sync::{self, Lock, Lrc, ReadGuard, WorkerLocal};
|
||||
use rustc_data_structures::sync::{self, Lock, Lrc, MappedReadGuard, ReadGuard, WorkerLocal};
|
||||
use rustc_errors::{
|
||||
DecorateLint, DiagnosticBuilder, DiagnosticMessage, ErrorGuaranteed, MultiSpan,
|
||||
};
|
||||
|
@ -836,7 +836,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
if let Some(id) = id.as_local() {
|
||||
self.definitions_untracked().def_key(id)
|
||||
} else {
|
||||
self.untracked.cstore.def_key(id)
|
||||
self.cstore_untracked().def_key(id)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -850,7 +850,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
if let Some(id) = id.as_local() {
|
||||
self.definitions_untracked().def_path(id)
|
||||
} else {
|
||||
self.untracked.cstore.def_path(id)
|
||||
self.cstore_untracked().def_path(id)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -860,7 +860,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
if let Some(def_id) = def_id.as_local() {
|
||||
self.definitions_untracked().def_path_hash(def_id)
|
||||
} else {
|
||||
self.untracked.cstore.def_path_hash(def_id)
|
||||
self.cstore_untracked().def_path_hash(def_id)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -869,7 +869,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
if crate_num == LOCAL_CRATE {
|
||||
self.sess.local_stable_crate_id()
|
||||
} else {
|
||||
self.untracked.cstore.stable_crate_id(crate_num)
|
||||
self.cstore_untracked().stable_crate_id(crate_num)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -880,7 +880,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
if stable_crate_id == self.sess.local_stable_crate_id() {
|
||||
LOCAL_CRATE
|
||||
} else {
|
||||
self.untracked.cstore.stable_crate_id_to_crate_num(stable_crate_id)
|
||||
self.cstore_untracked().stable_crate_id_to_crate_num(stable_crate_id)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -899,7 +899,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
} else {
|
||||
// If this is a DefPathHash from an upstream crate, let the CrateStore map
|
||||
// it to a DefId.
|
||||
let cstore = &*self.untracked.cstore;
|
||||
let cstore = &*self.cstore_untracked();
|
||||
let cnum = cstore.stable_crate_id_to_crate_num(stable_crate_id);
|
||||
cstore.def_path_hash_to_def_id(cnum, hash)
|
||||
}
|
||||
|
@ -913,7 +913,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
let (crate_name, stable_crate_id) = if def_id.is_local() {
|
||||
(self.crate_name(LOCAL_CRATE), self.sess.local_stable_crate_id())
|
||||
} else {
|
||||
let cstore = &*self.untracked.cstore;
|
||||
let cstore = &*self.cstore_untracked();
|
||||
(cstore.crate_name(def_id.krate), cstore.stable_crate_id(def_id.krate))
|
||||
};
|
||||
|
||||
|
@ -1011,8 +1011,8 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
|
||||
/// Note that this is *untracked* and should only be used within the query
|
||||
/// system if the result is otherwise tracked through queries
|
||||
pub fn cstore_untracked(self) -> &'tcx CrateStoreDyn {
|
||||
&*self.untracked.cstore
|
||||
pub fn cstore_untracked(self) -> MappedReadGuard<'tcx, CrateStoreDyn> {
|
||||
ReadGuard::map(self.untracked.cstore.read(), |c| &**c)
|
||||
}
|
||||
|
||||
/// Note that this is *untracked* and should only be used within the query
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue