Skip to content

Commit

Permalink
Start replacing CStore trait methods with hooks.
Browse files Browse the repository at this point in the history
This also avoids the cyclic definition issues with CrateStore being
defined after TyCtxt, but needing to be used in TyCtxt.
  • Loading branch information
oli-obk committed Mar 27, 2024
1 parent b13a71a commit 32bd3c3
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 16 deletions.
12 changes: 8 additions & 4 deletions compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ provide! { tcx, def_id, other, cdata,
}

pub(in crate::rmeta) fn provide(providers: &mut Providers) {
provide_cstore_hooks(providers);
// FIXME(#44234) - almost all of these queries have no sub-queries and
// therefore no actual inputs, they're just reading tables calculated in
// resolve! Does this work? Unsure! That's what the issue is about
Expand Down Expand Up @@ -664,11 +665,14 @@ impl CrateStore for CStore {
) -> ExpnId {
self.get_crate_data(cnum).expn_hash_to_expn_id(sess, index_guess, hash)
}
}

fn import_source_files(&self, sess: &Session, cnum: CrateNum) {
let cdata = self.get_crate_data(cnum);
fn provide_cstore_hooks(providers: &mut Providers) {
providers.hooks.import_source_files = |tcx, cnum| {
let cstore = CStore::from_tcx(tcx.tcx);
let cdata = cstore.get_crate_data(cnum);
for file_index in 0..cdata.root.source_map.size() {
cdata.imported_source_file(file_index as u32, sess);
cdata.imported_source_file(file_index as u32, tcx.sess);
}
}
};
}
11 changes: 8 additions & 3 deletions compiler/rustc_middle/src/hooks/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use crate::mir;
use crate::query::TyCtxtAt;
use crate::ty::{Ty, TyCtxt};
use rustc_span::def_id::LocalDefId;
use rustc_span::def_id::{CrateNum, LocalDefId};
use rustc_span::DUMMY_SP;

macro_rules! declare_hooks {
Expand All @@ -16,7 +16,6 @@ macro_rules! declare_hooks {
$(
$(#[$attr])*
#[inline(always)]
#[must_use]
pub fn $name(self, $($arg: $K,)*) -> $V
{
self.at(DUMMY_SP).$name($($arg,)*)
Expand All @@ -28,7 +27,6 @@ macro_rules! declare_hooks {
$(
$(#[$attr])*
#[inline(always)]
#[must_use]
#[instrument(level = "debug", skip(self), ret)]
pub fn $name(self, $($arg: $K,)*) -> $V
{
Expand Down Expand Up @@ -83,4 +81,11 @@ declare_hooks! {
/// You do not want to call this yourself, instead use the cached version
/// via `mir_built`
hook build_mir(key: LocalDefId) -> mir::Body<'tcx>;


/// Imports all `SourceFile`s from the given crate into the current session.
/// This normally happens automatically when we decode a `Span` from
/// that crate's metadata - however, the incr comp cache needs
/// to trigger this manually when decoding a foreign `Span`
hook import_source_files(key: CrateNum) -> ();
}
4 changes: 1 addition & 3 deletions compiler/rustc_middle/src/query/on_disk_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -492,9 +492,7 @@ impl<'a, 'tcx> CacheDecoder<'a, 'tcx> {
// expansion, so we use `import_source_files` to ensure that the foreign
// source files are actually imported before we call `source_file_by_stable_id`.
if source_file_cnum != LOCAL_CRATE {
self.tcx
.cstore_untracked()
.import_source_files(self.tcx.sess, source_file_cnum);
self.tcx.import_source_files(source_file_cnum);
}

source_map
Expand Down
6 changes: 0 additions & 6 deletions compiler/rustc_session/src/cstore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,6 @@ pub trait CrateStore: std::fmt::Debug {
index_guess: u32,
hash: ExpnHash,
) -> ExpnId;

/// Imports all `SourceFile`s from the given crate into the current session.
/// This normally happens automatically when we decode a `Span` from
/// that crate's metadata - however, the incr comp cache needs
/// to trigger this manually when decoding a foreign `Span`
fn import_source_files(&self, sess: &Session, cnum: CrateNum);
}

pub type CrateStoreDyn = dyn CrateStore + sync::DynSync + sync::DynSend;
Expand Down

0 comments on commit 32bd3c3

Please sign in to comment.