about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2024-03-26 17:01:47 +0000
committerOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2024-04-19 14:16:18 +0000
commit9e63e991e9690122df470f1fd6931a99bcc5e324 (patch)
tree2fe88a1c9a60d7b831f3d5a127582d8d77380e1a
parent0025c9cc5001c194ac1f8ce4824d93a0efbe5c18 (diff)
downloadrust-9e63e991e9690122df470f1fd6931a99bcc5e324.tar.gz
rust-9e63e991e9690122df470f1fd6931a99bcc5e324.zip
Prepare for `CrateNum` query feeding on creation
-rw-r--r--compiler/rustc_metadata/src/creader.rs7
-rw-r--r--compiler/rustc_middle/src/ty/context.rs7
2 files changed, 9 insertions, 5 deletions
diff --git a/compiler/rustc_metadata/src/creader.rs b/compiler/rustc_metadata/src/creader.rs
index 83fe39baf1f..888c2427d8f 100644
--- a/compiler/rustc_metadata/src/creader.rs
+++ b/compiler/rustc_metadata/src/creader.rs
@@ -16,7 +16,7 @@ use rustc_fs_util::try_canonicalize;
 use rustc_hir::def_id::{CrateNum, LocalDefId, StableCrateId, LOCAL_CRATE};
 use rustc_hir::definitions::Definitions;
 use rustc_index::IndexVec;
-use rustc_middle::ty::TyCtxt;
+use rustc_middle::ty::{TyCtxt, TyCtxtFeed};
 use rustc_session::config::{self, CrateType, ExternLocation};
 use rustc_session::cstore::{CrateDepKind, CrateSource, ExternCrate, ExternCrateSource};
 use rustc_session::lint;
@@ -166,7 +166,7 @@ impl CStore {
         &mut self,
         root: &CrateRoot,
         tcx: TyCtxt<'tcx>,
-    ) -> Result<CrateNum, CrateError> {
+    ) -> Result<TyCtxtFeed<'tcx, CrateNum>, CrateError> {
         assert_eq!(self.metas.len(), tcx.untracked().stable_crate_ids.read().len());
         let num = tcx.create_crate_num(root.stable_crate_id()).map_err(|existing| {
             // Check for (potential) conflicts with the local crate
@@ -409,7 +409,8 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
         let private_dep = self.is_private_dep(name.as_str(), private_dep);
 
         // Claim this crate number and cache it
-        let cnum = self.cstore.intern_stable_crate_id(&crate_root, self.tcx)?;
+        let feed = self.cstore.intern_stable_crate_id(&crate_root, self.tcx)?;
+        let cnum = feed.key();
 
         info!(
             "register crate `{}` (cnum = {}. private_dep = {})",
diff --git a/compiler/rustc_middle/src/ty/context.rs b/compiler/rustc_middle/src/ty/context.rs
index 3832fecfee4..b5769e6fee2 100644
--- a/compiler/rustc_middle/src/ty/context.rs
+++ b/compiler/rustc_middle/src/ty/context.rs
@@ -1261,14 +1261,17 @@ impl<'tcx> TyCtxt<'tcx> {
         feed
     }
 
-    pub fn create_crate_num(self, stable_crate_id: StableCrateId) -> Result<CrateNum, CrateNum> {
+    pub fn create_crate_num(
+        self,
+        stable_crate_id: StableCrateId,
+    ) -> Result<TyCtxtFeed<'tcx, CrateNum>, CrateNum> {
         if let Some(&existing) = self.untracked().stable_crate_ids.read().get(&stable_crate_id) {
             return Err(existing);
         }
 
         let num = CrateNum::new(self.untracked().stable_crate_ids.read().len());
         self.untracked().stable_crate_ids.write().insert(stable_crate_id, num);
-        Ok(num)
+        Ok(TyCtxtFeed { key: num, tcx: self })
     }
 
     pub fn iter_local_def_id(self) -> impl Iterator<Item = LocalDefId> + 'tcx {