diff options
| author | bors <bors@rust-lang.org> | 2020-12-01 14:30:02 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-12-01 14:30:02 +0000 |
| commit | 4cbda829c00af2c3ac362c979fa97ea90be0be7d (patch) | |
| tree | b75723e959bdda25ac83d5acf2f01bbb3cd32acb /compiler/rustc_interface/src | |
| parent | b2dd82929b5b956972446d9720ceabdee171d405 (diff) | |
| parent | 7a9aa4f9808fe37afb581ba54884612df2034a75 (diff) | |
| download | rust-4cbda829c00af2c3ac362c979fa97ea90be0be7d.tar.gz rust-4cbda829c00af2c3ac362c979fa97ea90be0be7d.zip | |
Auto merge of #74967 - Aaron1011:feature/incr-def-path-table, r=pnkfelix
Implement lazy decoding of DefPathTable during incremental compilation PR https://github.com/rust-lang/rust/pull/75813 implemented lazy decoding of the `DefPathTable` from crate metadata. However, it requires decoding the entire `DefPathTable` when incremental compilation is active, so that we can map a decoded `DefPathHash` to a `DefId` from an arbitrary crate. This PR adds support for lazy decoding of dependency `DefPathTable`s when incremental compilation si active. When we load the incremental cache and dep graph, we need the ability to map a `DefPathHash` to a `DefId` in the current compilation session (if the corresponding definition still exists). This is accomplished by storing the old `DefId` (that is, the `DefId` from the previous compilation session) for each `DefPathHash` we need to remap. Since a `DefPathHash` includes the owning crate, the old crate is guaranteed to be the right one (if the definition still exists). We then use the old `DefIndex` as an initial guess, which we validate by comparing the expected and actual `DefPathHash`es. In most cases, foreign crates will be completely unchanged, which means that we our guess will be correct. If our guess is wrong, we fall back to decoding the entire `DefPathTable` for the foreign crate. This still represents an improvement over the status quo, since we can skip decoding the entire `DefPathTable` for other crates (where all of our guesses were correct).
Diffstat (limited to 'compiler/rustc_interface/src')
| -rw-r--r-- | compiler/rustc_interface/src/passes.rs | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs index 1f820024f77..c13d26c79d7 100644 --- a/compiler/rustc_interface/src/passes.rs +++ b/compiler/rustc_interface/src/passes.rs @@ -747,7 +747,7 @@ pub fn create_global_ctxt<'tcx>( Definitions::new(crate_name, sess.local_crate_disambiguator()), )); - let query_result_on_disk_cache = rustc_incremental::load_query_result_cache(sess); + let query_result_on_disk_cache = rustc_incremental::load_query_result_cache(sess, defs); let codegen_backend = compiler.codegen_backend(); let mut local_providers = *DEFAULT_QUERY_PROVIDERS; |
