Auto merge of #95573 - cjgillot:lower-query, r=michaelwoerister
Make lowering a query Split from https://github.com/rust-lang/rust/pull/88186. This PR refactors the relationship between lowering and the resolver outputs in order to make lowering itself a query. In a first part, lowering is changed to avoid modifying resolver outputs, by maintaining its own data structures for creating new `NodeId`s and so. Then, the `TyCtxt` is modified to allow creating new `LocalDefId`s from inside it. This is done by: - enclosing `Definitions` in a lock, so as to allow modification; - creating a query `register_def` whose purpose is to declare a `LocalDefId` to the query system. See `TyCtxt::create_def` and `TyCtxt::iter_local_def_id` for more detailed explanations of the design.
This commit is contained in:
commit
0f573a0c54
37 changed files with 462 additions and 391 deletions
|
@ -15,7 +15,6 @@ use spans::{CoverageSpan, CoverageSpans};
|
|||
use crate::MirPass;
|
||||
|
||||
use rustc_data_structures::graph::WithNumNodes;
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
use rustc_index::vec::IndexVec;
|
||||
use rustc_middle::hir;
|
||||
|
@ -576,12 +575,6 @@ fn get_body_span<'tcx>(
|
|||
|
||||
fn hash_mir_source<'tcx>(tcx: TyCtxt<'tcx>, hir_body: &'tcx rustc_hir::Body<'tcx>) -> u64 {
|
||||
// FIXME(cjgillot) Stop hashing HIR manually here.
|
||||
let mut hcx = tcx.create_no_span_stable_hashing_context();
|
||||
let mut stable_hasher = StableHasher::new();
|
||||
let owner = hir_body.id().hir_id.owner;
|
||||
let bodies = &tcx.hir_owner_nodes(owner).unwrap().bodies;
|
||||
hcx.with_hir_bodies(false, owner, bodies, |hcx| {
|
||||
hir_body.value.hash_stable(hcx, &mut stable_hasher)
|
||||
});
|
||||
stable_hasher.finish()
|
||||
tcx.hir_owner_nodes(owner).unwrap().hash_including_bodies.to_smaller_hash()
|
||||
}
|
||||
|
|
|
@ -588,7 +588,7 @@ impl<'tcx> Inliner<'tcx> {
|
|||
);
|
||||
expn_data.def_site = callee_body.span;
|
||||
let expn_data =
|
||||
LocalExpnId::fresh(expn_data, self.tcx.create_stable_hashing_context());
|
||||
self.tcx.with_stable_hashing_context(|hcx| LocalExpnId::fresh(expn_data, hcx));
|
||||
let mut integrator = Integrator {
|
||||
args: &args,
|
||||
new_locals: Local::new(caller_body.local_decls.len())..,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue