diff --git a/README.md b/README.md index 64b0820..2c59247 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,13 @@ Seven plausible edits to rustc's metadata code were each built into the instrumented compiler and checked. mirth catches all seven; rustc's own metadata-related tests catch three. +Seven real bugs from rustc's history were then replayed by reverting their +fixes. mirth catches five; three of those needed a fixture addition or a +new step, made knowing the bug. + - [`docs/report.md`](docs/report.md): the experiment, for readers new to it - [`docs/results.md`](docs/results.md): each edit and the output that caught it +- [`docs/regressions.md`](docs/regressions.md): the replayed bugs, caught and missed - [`docs/plan.md`](docs/plan.md): the plan the work followed, with the properties ## An instrumented compiler @@ -33,6 +38,7 @@ rustc/setup.sh # fetch the pinned commit, configure boots rustc/build.sh # build stage 1 through mirth-watch, then its std rustc/check.sh chain # check fixtures/chain rustc/edits.sh chain # apply, check and revert each edit in rustc/edits +EDITS=regressions rustc/edits.sh chain # the same for the past bugs in rustc/regressions ``` The build takes about an hour on 16 cores. `rustc/rmeta.toml` says what is @@ -49,6 +55,10 @@ then: list in `tests/rmeta/.txt`; `--bless` accepts a changed list; - runs `mirth check` for P1, P2, P4 and P7; - builds again and compares every published `.rmeta` byte for byte (P5); +- does the same for two builds with `-Zthreads=8`; +- rebuilds incrementally after touching every source file, and compares + what each process did with `tests/rmeta/.touch.txt`: metadata + should be reused from the incremental cache, not encoded again; - applies `fixtures//edit`, rebuilds incrementally, and compares with a clean build of the edited source (P6). diff --git a/crates/mirth-cli/src/normalize.rs b/crates/mirth-cli/src/normalize.rs index 1c74e8d..702b85e 100644 --- a/crates/mirth-cli/src/normalize.rs +++ b/crates/mirth-cli/src/normalize.rs @@ -8,6 +8,7 @@ pub struct Normalize { hash: Regex, hash_directory: Regex, random: Regex, + session: Regex, } impl Normalize { @@ -22,6 +23,8 @@ impl Normalize { hash: Regex::new(r"-[0-9a-f]{16}\b").expect("a pattern"), hash_directory: Regex::new(r"/[0-9a-f]{16}/").expect("a pattern"), random: Regex::new(r"(^|/)(rmeta|rustc|\.tmp)[A-Za-z0-9]{6}").expect("a pattern"), + session: Regex::new(r"/incremental/([A-Za-z0-9_]+)-[a-z0-9]{8,20}/s-[A-Za-z0-9]+-[A-Za-z0-9]+-[A-Za-z0-9]+(-working)?/") + .expect("a pattern"), } } @@ -35,6 +38,7 @@ impl Normalize { } } let text = self.hash.replace_all(&text, "-#"); + let text = self.session.replace_all(&text, "/incremental/$1-#/s-*$2/"); let text = self.hash_directory.replace_all(&text, "/#/"); self.random.replace_all(&text, "$1$2*").into_owned() } @@ -64,6 +68,12 @@ mod tests { ), "target/debug/build/base/#/out/.tmp*.temp-archive" ); + assert_eq!( + normalize.path( + "/work/p/target/debug/incremental/base-3se3me7pu8ess/s-hmyrlhsifz-1yrw8tl-5gd9hf5lcjwc08vpf55f0lni9/metadata.rmeta" + ), + "target/debug/incremental/base-#/s-*/metadata.rmeta" + ); assert_eq!(normalize.path("/elsewhere/x"), "/elsewhere/x"); } } diff --git a/docs/regressions.md b/docs/regressions.md new file mode 100644 index 0000000..7d6a62b --- /dev/null +++ b/docs/regressions.md @@ -0,0 +1,126 @@ +# Seven past rustc bugs, replayed + +The seven edits in [`results.md`](results.md) were written knowing what +mirth watches. This is the stronger test: real bugs from rustc's history, +each fixed in a merged PR. For each one, the fix was reverted on the pinned +compiler (`ea137335b`), the instrumented compiler was rebuilt, and +`rustc/check.sh chain` was run, along with the same selection of rustc's +own tests as for the edits (180 incremental, 532 UI, 46 run-make). + +The patches are in [`rustc/regressions/`](../rustc/regressions), the full +output of each run is in [`regressions/`](regressions), and +`EDITS=regressions rustc/edits.sh chain` reproduces it. + +## Result + +| PR | the bug | mirth | rustc's tests | +|---|---|---|---| +| [#122891](https://github.com/rust-lang/rust/pull/122891) | a trait's implied predicates were not encoded, so dependents lost bounds | **caught**: the list | pass | +| [#130201](https://github.com/rust-lang/rust/pull/130201) | an async closure's by-move body was not encoded; dependents ICE | **caught**: the build ICEs | pass | +| [#138678](https://github.com/rust-lang/rust/pull/138678) | unused doc link reference definitions were encoded in hash order | **caught**: P5, P5 with threads, the touch rebuild, P6 | pass | +| [#143247](https://github.com/rust-lang/rust/pull/143247) | metadata always depended on a node that is never green, so it was never reused | **caught**: the touch rebuild | pass | +| [#82047](https://github.com/rust-lang/rust/pull/82047) | the old `.rmeta` was not removed before the rename (slow on ext4) | **caught**: the list | pass | +| [#144050](https://github.com/rust-lang/rust/pull/144050) | `#[no_mangle]` and `#[link_section]` were not encoded for rustdoc | missed | pass | +| [#162910](https://github.com/rust-lang/rust/pull/162910) | `DefPathHashMap` was encoded in insertion order under the parallel front end | missed | pass | + +mirth catches five of the seven. The selected rustc tests catch none. +That is less damning than it looks: each fix added a regression test, and +none of those tests is in the selection (`tests/ui/associated-type-bounds`, +`tests/ui/async-await/async-closures`, `tests/rustdoc-html`, and so on). +The selection was made for the edits, before the regressions were chosen. +Run whole, rustc's test suite would catch most of these today, because of +those very tests. The question is what would have caught them before. + +## What it took + +Two were caught by the fixture and the checks as they stood: #122891 +(the chain fixture already has a public trait) and #82047. The other three +needed something added, each written knowing the bug: + +- **A step.** #143247 was caught by a new step in `check.sh`: an incremental + rebuild after touching every source file, whose record is blessed in + `tests/rmeta/chain.touch.txt`. With nothing changed, rustc should reuse + each crate's metadata from the incremental cache, and the record shows it + doing so. The run-make test + `metadata-stub-incremental-reuse` takes the same path and passed: it + checks that the build works, not that the metadata was reused. +- **Fixture code.** #138678 needs a doc comment with unused reference + definitions; `mid` now has one. #130201 needs an async closure called by + value in another crate; `base` and `app` now have one. + +So the fair reading is: the checks are general, but a check can only see a +bug the fixture exercises. Every addition stays in the fixture, so each is +now a regression test for its bug, as rustc's own test for it is. + +## What each looks like + +**#122891.** Reverting the fix stops `base` from writing +`explicit_implied_clauses_of`, and dependents fall back to the super +clauses: + +```diff +- 4 2 items 2 tracked 2 written base explicit_implied_clauses_of ++ 6 2 items 2 tracked base explicit_implied_clauses_of ++ 4 2 items 2 tracked 2 written base explicit_super_clauses_of +``` + +The fixture has no bound that only the implied predicates carry, so it +still compiles. The list shows the change anyway. + +**#130201.** The dependent ICEs, as in the original issue: + +```text +DefId(20:17 ~ base[f922]::greeter::{closure#0}::{closure#0}) does not have a "coroutine_by_move_body_def_id" +``` + +**#138678.** The unused reference definitions are resolved and encoded in +an order that changes from run to run, so two clean builds disagree (P5), +and so do an incremental rebuild and a clean build (P6). In the touch +rebuild, `mid`'s metadata is encoded again instead of reused, because its +hash changed. + +**#143247.** In the touch rebuild, every library encodes its metadata +again instead of opening the incremental cache's copy: + +```diff +- open target/debug/incremental/base-#/s-*/metadata.rmeta in encoder::encode_metadata ++ encode-to target/debug/build/base/#/out/rmeta*/full.rmeta in encoder::encode_metadata +``` + +and the record of what was encoded appears where there was none. + +**#82047.** The `remove_file` before each rename disappears from the +list. The bug was a performance one (ext4's `auto_da_alloc` flushes a file +renamed over an existing one), so nothing else fails. + +## The two misses + +**#144050** changes which attributes are encoded for rustdoc. The record +counts table writes per item, and `base_limit` still has its doc comment +encoded as an attribute, so the count does not change. Only rustdoc reads +these attributes, and mirth does not run rustdoc. Seeing it would take +recording what each table entry contains, or a `cargo doc` step. + +**#162910** makes metadata depend on the order in which threads create +definitions. `check.sh` builds twice with `-Zthreads=8` and compares, and +with the fix reverted the builds matched. A follow-up run of 16 clean +builds with `-Zthreads=8` (`REPEAT=16 HUNT_EDITS=0 rustc/hunt.sh chain`) +matched too, and so did rustc's own +`tests/run-make/parallel-reproducible-build`, built ten times per input. +The fixture does not create definitions late enough, in parallel, for the +order to vary. Even if it did, a difference would be hard to pin on this +bug: on the unmodified compiler, 1 of 24 threaded builds of the chain +fixture already differed. That one was not traced; the open parallel +reproducibility issues in [`hunt.md`](hunt.md) are the likely cause. + +## Limits + +- Five of seven caught, with three fixture and step additions made knowing + the bug. A fair estimate of what mirth would have caught, unprompted, at + the time is the two caught without additions, plus whatever a broader + fixture would have exercised. +- One fixture. Bugs in code a fixture does not exercise are invisible. +- The candidates came from a search of rustc's history for metadata and + incremental fixes that still revert cleanly. Several good ones did not: + #161450 (syntax context encoding under threads) needs a port, and + #117301 (a write error swallowed while encoding) needs fault injection. diff --git a/docs/regressions/122891-implied-clauses.txt b/docs/regressions/122891-implied-clauses.txt new file mode 100644 index 0000000..cb88804 --- /dev/null +++ b/docs/regressions/122891-implied-clauses.txt @@ -0,0 +1,141 @@ +# 122891-implied-clauses + +== clean build +--- /home/exedev/mirth/tests/rmeta/chain.txt ++++ this build +@@ + 35 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 372 160 items 160 tracked explicit_clauses_of +- 67 37 items 37 tracked explicit_implied_clauses_of ++ 103 37 items 37 tracked explicit_implied_clauses_of + 6 5 items 5 tracked explicit_implied_const_bounds + 4 2 items 2 tracked explicit_item_bounds + 4 2 items 2 tracked explicit_item_self_bounds +- 20 11 items 11 tracked explicit_super_clauses_of ++ 71 39 items 39 tracked explicit_super_clauses_of + 28 14 items 14 tracked expn_that_defined + 3 3 items 3 tracked exportable_items + 21 19 items 19 tracked exported_generic_symbols +@@ + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items + 36 18 items 18 tracked 18 written base explicit_clauses_of +- 4 2 items 2 tracked 2 written base explicit_implied_clauses_of ++ 6 2 items 2 tracked base explicit_implied_clauses_of + 4 2 items 2 tracked 2 written base explicit_item_bounds + 22 2 items 2 tracked 2 written base explicit_item_self_bounds ++ 4 2 items 2 tracked 2 written base explicit_super_clauses_of + 4 2 items 2 tracked 2 written base expn_that_defined + 1 1 items 1 tracked base exportable_items + 1 1 items 1 tracked base exported_generic_symbols +@@ + 10 5 items 5 tracked 5 written mid visibility + read outside a query + 87 CrateMetadata::def_kind in - +- 88547 CrateMetadata::def_path_hash in - ++ 88537 CrateMetadata::def_path_hash in - + 144 CrateMetadata::get_expn_that_defined in - + 6 CrateMetadata::get_item_attrs in - + 9 CrateMetadata::get_macro in - +@@ + 2 2 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().map(|child| child.res.def_id().index)) + 19 19 items record_array!(self.tables.variances_of[def_id] <- v) + 2 1 items record_defaulted_array!(self.tables.ambig_module_children[def_id] <- ambig_module_children) +- 2 2 items record_defaulted_array!(self.tables.explicit_implied_clauses_of[def_id] <- self.tcx.explicit_implied_clauses_of(def_id).skip_binder()) + 4 4 items record_defaulted_array!(self.tables.explicit_item_bounds[def_id] <- bounds) + 4 4 items record_defaulted_array!(self.tables.explicit_item_self_bounds[def_id] <- bounds) + 2 2 items record_defaulted_array!(self.tables.explicit_super_clauses_of[def_id] <- self.tcx.explicit_super_clauses_of(def_id).skip_binder()) +@@ + 35 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 426 198 items 198 tracked explicit_clauses_of +- 63 34 items 34 tracked explicit_implied_clauses_of ++ 88 34 items 34 tracked explicit_implied_clauses_of + 9 6 items 6 tracked explicit_implied_const_bounds + 2 1 items 1 tracked explicit_item_bounds + 2 1 items 1 tracked explicit_item_self_bounds +- 19 11 items 11 tracked explicit_super_clauses_of ++ 63 34 items 34 tracked explicit_super_clauses_of + 28 12 items 12 tracked expn_that_defined + 2 2 items 2 tracked exportable_items + 20 18 items 18 tracked exported_generic_symbols +@@ + 5 0 items 0 tracked ? crate_incoherent_impls + read outside a query + 148 CrateMetadata::def_kind in - +- 43229 CrateMetadata::def_path_hash in - ++ 43223 CrateMetadata::def_path_hash in - + 144 CrateMetadata::get_expn_that_defined in - + 14 CrateMetadata::get_item_attrs in - + 21 CrateMetadata::get_macro in - +@@ + 37 MetadataBlob::get_root in CStore::register_crate + 38 MetadataBlob::get_root_unhashed in CStore::register_crate + 43 new::{closure#1} in CStore::register_crate +- 5749 CrateMetadata::def_path_hash in encoder::encode_metadata ++ 5744 CrateMetadata::def_path_hash in encoder::encode_metadata + 128 def_key::{closure#0} in encoder::encode_metadata + + == mid (lib) emit dep-info,metadata,link == +@@ + 35 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 58 26 items 26 tracked explicit_clauses_of +- 27 13 items 13 tracked explicit_implied_clauses_of ++ 39 13 items 13 tracked explicit_implied_clauses_of + 2 2 items 2 tracked explicit_implied_const_bounds ++ 27 13 items 13 tracked explicit_super_clauses_of + 10 3 items 3 tracked expn_that_defined + 1 1 items 1 tracked exportable_items + 1 1 items 1 tracked exported_non_generic_symbols +@@ + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items + 8 4 items 4 tracked 4 written base explicit_clauses_of +- 2 1 items 1 tracked 1 written base explicit_implied_clauses_of ++ 3 1 items 1 tracked base explicit_implied_clauses_of ++ 2 1 items 1 tracked 1 written base explicit_super_clauses_of + 1 1 items 1 tracked base exportable_items + 1 1 items 1 tracked base exported_non_generic_symbols + 1 1 items 1 tracked base externally_implementable_items +mirth: the record differs from /home/exedev/mirth/tests/rmeta/chain.txt; rerun with --bless to accept it +P1 P2 P4 P7 hold +== P5: a second clean build +P5 holds: 2 .rmeta files identical +== P5 under the parallel front end (-Zthreads=8) +P5 holds with -Zthreads=8: 2 .rmeta files identical +== an incremental rebuild after touching every source file +--- /home/exedev/mirth/tests/rmeta/chain.touch.txt ++++ this build +@@ + 19 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 6 2 items 2 tracked explicit_clauses_of +- 7 3 items 3 tracked explicit_implied_clauses_of ++ 8 3 items 3 tracked explicit_implied_clauses_of ++ 7 3 items 3 tracked explicit_super_clauses_of + 1 1 items 1 tracked exportable_items + 21 19 items 19 tracked exported_generic_symbols + 19 19 items 19 tracked exported_non_generic_symbols +@@ + 19 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 6 3 items 3 tracked explicit_clauses_of +- 5 3 items 3 tracked explicit_implied_clauses_of ++ 9 3 items 3 tracked explicit_implied_clauses_of ++ 5 3 items 3 tracked explicit_super_clauses_of + 28 14 items 14 tracked generics_of + 8 4 items 4 tracked impl_trait_header + 15 15 items 15 tracked implementations_of_trait +mirth: the record differs from /home/exedev/mirth/tests/rmeta/chain.touch.txt; rerun with --bless to accept it +== P6: an incremental rebuild after an edit +P6 holds: incremental and clean .rmeta files identical +check.sh exit 1 + +existing tests (tests/incremental; tests/ui/{deprecation,crate-loading,rmeta,extern,cross-crate}; +43 metadata-related tests/run-make): + test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + test result: ok. 532 passed; 0 failed; 6 ignored; 0 measured; 21985 filtered out + test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 497 filtered out +suites.sh exit 0 diff --git a/docs/regressions/130201-by-move-body.txt b/docs/regressions/130201-by-move-body.txt new file mode 100644 index 0000000..93b433c --- /dev/null +++ b/docs/regressions/130201-by-move-body.txt @@ -0,0 +1,46 @@ +# 130201-by-move-body + +== clean build +mirth: cargo failed (exit status: 101); see /home/exedev/mirth-work/rust/build/mirth-work/chain/a.record/stderr +warning: use of deprecated function `base::old_clamp`: use `clamp` + --> src/main.rs:28:25 + | +28 | let clamped = base::old_clamp(250); + | ^^^^^^^^^ + | + = note: `#[warn(deprecated)]` on by default + + +thread 'rustc' (392895) panicked at compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs:230:1: +DefId(20:17 ~ base[f922]::greeter::{closure#0}::{closure#0}) does not have a "coroutine_by_move_body_def_id" +stack backtrace: + 0: 0x7f8015617611 - <::print::DisplayBacktrace as core[fd4243e10de856d2]::fmt::Display>::fmt + 1: 0x7f801565f86a - core[fd4243e10de856d2]::fmt::write + 2: 0x7f801562a84c - ::write_fmt + 3: 0x7f80155df626 - std[f097bc1422754316]::panicking::default_hook::{closure#0} + 4: 0x7f8015607991 - std[f097bc1422754316]::panicking::default_hook + 5: 0x7f80114a9af4 - as core[fd4243e10de856d2]::ops::function::Fn<(&dyn for<'a, 'b> core[fd4243e10de856d2]::ops::function::Fn<(&'a std[f097bc1422754316]::panic::PanicHookInfo<'b>,), Output = ()> + core[fd4243e10de856d2]::marker::Sync + core[fd4243e10de856d2]::marker::Send, &std[f097bc1422754316]::panic::PanicHookInfo)>>::call + 6: 0x7f8015607cf2 - std[f097bc1422754316]::panicking::panic_with_hook + 7: 0x7f80155df6d2 - std[f097bc1422754316]::panicking::panic_handler::{closure#0} + 8: 0x7f80155d78a9 - std[f097bc1422754316]::sys::backtrace::__rust_end_short_backtrace:: + 9: 0x7f80155e11bd - __rustc[e66452c6972d9e87]::rust_begin_unwind + 10: 0x7f80156602fc - core[fd4243e10de856d2]::panicking::panic_fmt + 11: 0x7f8014617d36 - rustc_metadata[8a0c1f1c6fb8292e]::rmeta::decoder::cstore_impl::provide_extern::coroutine_by_move_body_def_id::{closure#1} + 12: 0x7f801463041c - rustc_metadata[8a0c1f1c6fb8292e]::rmeta::decoder::cstore_impl::provide_extern::coroutine_by_move_body_def_id + 13: 0x7f8013992a1d - rustc_query_impl[96a446c2991a686e]::query_vtables::coroutine_by_move_body_def_id::invoke_provider_fn::__rust_begin_short_backtrace + 14: 0x7f80137ba556 - >>::with::>>::{closure#1}, (rustc_middle[88b9f6a3502ffb4d]::query::erase::ErasedData<[u8; 8usize]>, rustc_middle[88b9f6a3502ffb4d]::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle[88b9f6a3502ffb4d]::query::erase::ErasedData<[u8; 8usize]>, rustc_middle[88b9f6a3502ffb4d]::dep_graph::graph::DepNodeIndex)> + 15: 0x7f80137177a3 - rustc_query_impl[96a446c2991a686e]::execution::try_execute_query::>, true> + 16: 0x7f8013aa25bc - rustc_query_impl[96a446c2991a686e]::query_vtables::coroutine_by_move_body_def_id::execute_query_incr::__rust_end_short_backtrace + 17: 0x7f8014c48f0f - ::coroutine_layout + 18: 0x7f8011a0582c - rustc_ty_utils[1f4b2f2f7b3dc994]::layout::layout_of + 19: 0x7f8013a0eab3 - rustc_query_impl[96a446c2991a686e]::query_vtables::layout_of::invoke_provider_fn::__rust_begin_short_backtrace + 20: 0x7f80137bfae0 - >>::with::, rustc_middle[88b9f6a3502ffb4d]::query::erase::ErasedData<[u8; 16usize]>>>::{closure#1}, (rustc_middle[88b9f6a3502ffb4d]::query::erase::ErasedData<[u8; 16usize]>, rustc_middle[88b9f6a3502ffb4d]::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle[88b9f6a3502ffb4d]::query::erase::ErasedData<[u8; 16usize]>, rustc_middle[88b9f6a3502ffb4d]::dep_graph::graph::DepNodeIndex)> + 21: 0x7f801372a206 - rustc_query_impl[96a446c2991a686e]::execution::try_execute_query::, rustc_middle[88b9f6a3502ffb4d]::query::erase::ErasedData<[u8; 16usize]>>, true> + 22: 0x7f8013aa3c20 - rustc_query_impl[96a446c2991a686e]::query_vtables::layout_of::execute_query_incr::__rust_end_short_backtrace + 23: 0x7f80119b6ce7 - ::spanned_layout_of + 24: 0x7f8011a3cbf9 - > as alloc[9a3cc8629af471e6]::vec::spec_from_iter::SpecFromIter, core[fd4243e10de856d2]::iter::adapters::GenericShunt, rustc_ty_utils[1f4b2f2f7b3dc994]::layout::layout_of_uncached::{closure#20}::{closure#0}>>, core[fd4243e10de856d2]::result::Result>>>::from_iter + 25: 0x7f8011a3c4f6 - >> as alloc[9a3cc8629af471e6]::vec::spec_from_iter::SpecFromIter>, core[fd4243e10de856d2]::iter::adapters::GenericShunt, rustc_ty_utils[1f4b2f2f7b3dc994]::layout::layout_of_uncached::{closure#20}>>, core[fd4243e10de856d2]::result::Result>>>::from_iter + 26: 0x7f8011a1c625 - core[fd4243e10de856d2]::iter::adapters::try_process::, rustc_ty_utils[1f4b2f2f7b3dc994]::layout::layout_of_uncached::{closure#20}>>, rustc_index[5fcbab7e3c37918]::vec::IndexVec>, core[fd4243e10de856d2]::result::Result, , rustc_ty_utils[1f4b2f2f7b3dc994]::layout::layout_of_uncached::{closure#20}> as core[fd4243e10de856d2]::iter::traits::iterator::Iterator>::try_collect>>>::{closure#0}, rustc_index[5fcbab7e3c37918]::vec::IndexVec>>> + 27: 0x7f8011a052f8 - rustc_ty_utils[1f4b2f2f7b3dc994]::layout::layout_of +check.sh exit 1 + diff --git a/docs/regressions/138678-doc-link-order.txt b/docs/regressions/138678-doc-link-order.txt new file mode 100644 index 0000000..94bf6f8 --- /dev/null +++ b/docs/regressions/138678-doc-link-order.txt @@ -0,0 +1,325 @@ +# 138678-doc-link-order + +== clean build +P1 P2 P4 P7 hold +== P5: a second clean build +P5 broken: .rmeta files differ between two clean builds +2c2 +< b8ff8b16034c3334f47707b534a3daa1012e132382d15f5583618db185a71ed8 ./debug/build/mid/b728536ffc6a92a7/out/libmid-b728536ffc6a92a7.rmeta +--- +> e8140552dba6c3ac9f3ed95f138f9af34c21d2f087b529c3765266ba5e5d0e40 ./debug/build/mid/b728536ffc6a92a7/out/libmid-b728536ffc6a92a7.rmeta +== P5 under the parallel front end (-Zthreads=8) +P5 broken with -Zthreads=8: .rmeta files differ between two clean builds +2c2 +< 7675b6e0f858fc78926cd670fb0a07a9f56d34dd540219126692a463d1e533d5 ./debug/build/mid/57d8b59076067cfd/out/libmid-57d8b59076067cfd.rmeta +--- +> aebbab651854e77f8a44b4ed09347b8baa33c44b18699f9257af7821f809030d ./debug/build/mid/57d8b59076067cfd/out/libmid-57d8b59076067cfd.rmeta +== an incremental rebuild after touching every source file +--- /home/exedev/mirth/tests/rmeta/chain.touch.txt ++++ this build +@@ + create target/debug/build/app/#/out/rustc* in - + remove_dir_all target/debug/build/app/#/out/rustc* in - + read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote +- 6 2 items 2 tracked attrs_for_def ++ 104 5 items 5 tracked adt_def ++ 2505 355 items 355 tracked associated_item ++ 66 33 items 33 tracked associated_item_def_ids ++ 22 8 items 8 tracked attrs_for_def + 19 19 items 19 tracked canonical_symbols + 128 64 items 64 tracked codegen_fn_attrs ++ 6 6 items 6 tracked constness + 45 45 items 45 tracked cross_crate_inlinable + 19 19 items 19 tracked debugger_visualizers +- 132 132 items 132 tracked def_kind +- 1 1 items 1 tracked defaultness ++ 12 6 items 6 tracked def_ident_span ++ 176 176 items 176 tracked def_kind ++ 6 2 items 2 tracked def_span ++ 7 7 items 7 tracked defaultness + 19 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items +- 6 2 items 2 tracked explicit_clauses_of +- 7 3 items 3 tracked explicit_implied_clauses_of ++ 54 25 items 25 tracked explicit_clauses_of ++ 12 6 items 6 tracked explicit_implied_clauses_of ++ 10 6 items 6 tracked explicit_super_clauses_of ++ 12 6 items 6 tracked expn_that_defined + 1 1 items 1 tracked exportable_items + 21 19 items 19 tracked exported_generic_symbols + 19 19 items 19 tracked exported_non_generic_symbols +- 46 22 items 22 tracked generics_of +- 20 10 items 10 tracked impl_trait_header +- 1 1 items 1 tracked implementations_of_trait +- 2 2 items 2 tracked inferred_outlives_of +- 1 1 items 1 tracked intrinsic_raw ++ 14 7 items 7 tracked fn_sig ++ 90 44 items 44 tracked generics_of ++ 30 15 items 15 tracked impl_trait_header ++ 112 112 items 112 tracked implementations_of_trait ++ 25 25 items 25 tracked inferred_outlives_of ++ 6 3 items 3 tracked inherent_impls ++ 4 4 items 4 tracked intrinsic_raw ++ 5 5 items 5 tracked lookup_deprecation_entry ++ 14 7 items 7 tracked lookup_stability + 19 19 items 19 tracked missing_lang_items + 3402 43 items 43 tracked module_children + 23 19 items 19 tracked native_libraries +- 2 1 items 1 tracked trait_def +- 36 18 items 18 tracked type_of +- 136 68 items 68 tracked visibility +- 11 5 items 5 tracked base attrs_for_def ++ 20 10 items 10 tracked trait_def ++ 56 28 items 28 tracked type_of ++ 6 3 items 3 tracked variances_of ++ 148 74 items 74 tracked visibility ++ 5 0 items 0 tracked ? crate_incoherent_impls ++ 16 1 items 1 tracked base adt_def ++ 32 6 items 6 tracked base associated_item ++ 6 3 items 3 tracked base associated_item_def_ids ++ 13 6 items 6 tracked base attrs_for_def + 1 1 items 1 tracked base canonical_symbols +- 12 6 items 6 tracked base codegen_fn_attrs +- 5 5 items 5 tracked base cross_crate_inlinable ++ 12 6 items 6 tracked none written base codegen_fn_attrs ++ 8 8 items 8 tracked none written base constness ++ 5 5 items 5 tracked none written base cross_crate_inlinable + 1 1 items 1 tracked base debugger_visualizers +- 11 11 items 11 tracked base def_kind ++ 6 3 items 3 tracked none written base def_ident_span ++ 22 22 items 22 tracked none written base def_kind ++ 3 3 items 3 tracked none written base defaultness + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items ++ 34 17 items 17 tracked none written base explicit_clauses_of ++ 4 2 items 2 tracked base explicit_implied_clauses_of ++ 22 2 items 2 tracked base explicit_item_self_bounds ++ 4 2 items 2 tracked none written base expn_that_defined + 1 1 items 1 tracked base exported_generic_symbols + 1 1 items 1 tracked base exported_non_generic_symbols +- 2 1 items 1 tracked base fn_sig +- 2 1 items 1 tracked base generics_of ++ 16 8 items 8 tracked none written base fn_sig ++ 28 14 items 14 tracked none written base generics_of ++ 4 2 items 2 tracked none written base impl_trait_header ++ 4 4 items 4 tracked base implementations_of_trait ++ 17 17 items 17 tracked none written base inferred_outlives_of ++ 2 1 items 1 tracked base inherent_impls ++ 4 4 items 4 tracked base intrinsic_raw ++ 3 3 items 3 tracked base lookup_deprecation_entry ++ 1 1 items 1 tracked base lookup_stability + 1 1 items 1 tracked base missing_lang_items + 107 3 items 3 tracked base module_children + 1 1 items 1 tracked base native_libraries +- 2 1 items 1 tracked base type_of +- 6 3 items 3 tracked base visibility +- 2 1 items 1 tracked mid attrs_for_def ++ 4 2 items 2 tracked base trait_def ++ 14 7 items 7 tracked none written base type_of ++ 2 1 items 1 tracked none written base variances_of ++ 12 6 items 6 tracked none written base visibility ++ 24 1 items 1 tracked mid adt_def ++ 1 1 items 1 tracked mid adt_destructor ++ 2 1 items 1 tracked 1 written mid anon_const_kind ++ 7 1 items 1 tracked mid associated_item ++ 2 1 items 1 tracked mid associated_item_def_ids ++ 4 2 items 2 tracked mid attrs_for_def + 1 1 items 1 tracked mid canonical_symbols +- 2 1 items 1 tracked mid codegen_fn_attrs +- 1 1 items 1 tracked mid cross_crate_inlinable ++ 4 2 items 2 tracked 2 written mid codegen_fn_attrs ++ 1 1 items 1 tracked 1 written mid constness ++ 2 2 items 2 tracked 1 written mid cross_crate_inlinable + 1 1 items 1 tracked mid debugger_visualizers +- 1 1 items 1 tracked mid def_kind ++ 4 2 items 2 tracked 2 written mid def_ident_span ++ 7 7 items 7 tracked 7 written mid def_kind ++ 8 4 items 4 tracked 4 written mid def_span ++ 2 2 items 2 tracked 2 written mid defaultness + 1 1 items 1 tracked mid defined_lang_items + 1 1 items 1 tracked mid diagnostic_items ++ 8 4 items 4 tracked 4 written mid explicit_clauses_of ++ 2 1 items 1 tracked 1 written mid expn_that_defined ++ 1 1 items 1 tracked mid exportable_items + 1 1 items 1 tracked mid exported_generic_symbols + 1 1 items 1 tracked mid exported_non_generic_symbols +- 4 2 items 2 tracked mid generics_of ++ 1 1 items 1 tracked mid externally_implementable_items ++ 4 2 items 2 tracked 2 written mid fn_sig ++ 10 5 items 5 tracked 5 written mid generics_of ++ 1 1 items 1 tracked mid impl_parent ++ 2 1 items 1 tracked 1 written mid impl_trait_header ++ 1 1 items 1 tracked mid implementations_of_trait ++ 4 4 items 4 tracked 4 written mid inferred_outlives_of ++ 2 1 items 1 tracked mid inherent_impls ++ 1 1 items 1 tracked mid intrinsic_raw ++ 2 2 items 2 tracked mid is_doc_hidden ++ 1 1 items 1 tracked mid is_mir_available ++ 5 5 items 5 tracked mid lookup_deprecation_entry ++ 4 4 items 4 tracked mid lookup_stability ++ 2 1 items 1 tracked 1 written mid mir_for_ctfe + 1 1 items 1 tracked mid missing_lang_items + 31 1 items 1 tracked mid module_children + 1 1 items 1 tracked mid native_libraries +- 2 1 items 1 tracked mid visibility ++ 2 1 items 1 tracked 1 written mid optimized_mir ++ 2 1 items 1 tracked mid reachable_non_generics ++ 1 1 items 1 tracked mid stable_order_of_exportable_impls ++ 1 1 items 1 tracked mid trivial_const ++ 1 1 items 1 tracked 1 written mid type_alias_is_checked ++ 16 8 items 8 tracked 8 written mid type_of ++ 2 1 items 1 tracked 1 written mid variances_of ++ 10 5 items 5 tracked 5 written mid visibility + read outside a query + 87 CrateMetadata::def_kind in - +- 8609 CrateMetadata::def_path_hash in - ++ 26140 CrateMetadata::def_path_hash in - + 27 CrateMetadata::expn_hash_to_expn_id in - + 144 CrateMetadata::get_expn_that_defined in - + 6 CrateMetadata::get_item_attrs in - +@@ + 6 MetadataBlob::get_root in - + 44 decode_expn_id::{closure#0} in - + 8 decode_syntax_context::{closure#0} in - +- 294 def_key::{closure#0} in - ++ 286 def_key::{closure#0} in - + 9 expn_hash_to_expn_id::{closure#0} in - + 47 get_ambig_module_children::{closure#0} in - +- 1474 imported_source_file::{closure#2} in - ++ 1440 imported_source_file::{closure#2} in - + 84 CrateMetadata::new in CStore::register_crate + 21 CrateRoot>::decode_crate_deps in CStore::register_crate + 36 MetadataBlob::check_compatibility in CStore::register_crate +@@ + open target/debug/build/base/#/out/libbase-#.rmeta in - + open target/debug/build/base/#/out/libbase-#.rmeta in - + create target/debug/build/mid/#/out/rmeta* in fs::encode_and_write_metadata +- open target/debug/incremental/mid-#/s-*/metadata.rmeta in encoder::encode_metadata ++ encode-to target/debug/build/mid/#/out/rmeta*/full.rmeta in encoder::encode_metadata ++ finished in encoder::encode_metadata + encode-to target/debug/build/mid/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata + remove_file target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata +@@ + remove_dir_all target/debug/build/mid/#/out/.tmp*.temp-archive in - + remove_dir_all target/debug/build/mid/#/out/rustc* in - + remove_dir_all target/debug/build/mid/#/out/rmeta* in - ++encoded ++ 1 1 items adapted.set_some(on_disk_index, self.lazy(adapted_source_file)) ++ 2 2 items expn_data_table .set_some(index.as_raw(), this.lazy(expn_data.expect("local expn"))) ++ 2 2 items expn_hash_table.set_some(index.as_raw(), this.lazy(hash)) ++ 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[def_id] <- associated_item_def_ids.iter().map(|&def_id| { assert!(def_id.is_local()); def_id.index }) ++ 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[variant.def_id] <- variant.fields.iter().map(|f| { assert!(f.did.is_local()); f.did.index })) ++ 11 11 items record_array!(self.tables.attributes[def_id.to_def_id()] <- attr_iter) ++ 1 1 items record_array!(self.tables.doc_link_traits_in_scope[def_id.to_def_id()] <- traits) ++ 2 2 items record_array!(self.tables.fn_arg_idents[def_id] <- tcx.fn_arg_idents(def_id)) ++ 2 1 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().filter(|child| child.reexport_chain.is_empty()) .map(|child| child.res ++ 3 3 items record_array!(self.tables.variances_of[def_id] <- v) ++ 2 1 items record_defaulted_array!(self.tables.ambig_module_children[def_id] <- ambig_module_children) ++ 9 9 items record_defaulted_array!(self.tables.inferred_outlives_of[def_id] <- inferred_outlives) ++ 2 1 items record_defaulted_array!(self.tables.module_children_reexports[def_id] <- module_children.iter().filter(|child| !child.reexport_chain.is_empty())) ++ 16 16 items record_some!(self.tables.def_kind[def_id] <- def_kind) ++ 2 2 items record_some_lazy!( self.tables.mut_restriction[field.did] <- field.mut_restriction ) ++ 1 1 items record_some_lazy!(self.tables.anon_const_kind[def_id] <- self.tcx.anon_const_kind(def_id)) ++ 1 1 items record_some_lazy!(self.tables.assoc_container[def_id] <- item.container) ++ 1 1 items record_some_lazy!(self.tables.associated_types_for_impl_traits_in_trait_or_impl[def_id] <- table) ++ 1 1 items record_some_lazy!(self.tables.closure_saved_names_of_captured_variables[def_id.to_def_id()] <- tcx.closure_saved_names_of_captured_variables(def_id)) ++ 2 2 items record_some_lazy!(self.tables.codegen_fn_attrs[def_id] <- self.tcx.codegen_fn_attrs(def_id)) ++ 12 12 items record_some_lazy!(self.tables.def_ident_span[def_id] <- ident_span) ++ 16 16 items record_some_lazy!(self.tables.def_keys[def_id] <- def_key) ++ 16 16 items record_some_lazy!(self.tables.def_span[def_id] <- def_span) ++ 1 1 items record_some_lazy!(self.tables.doc_link_resolutions[def_id.to_def_id()] <- res_map) ++ 9 9 items record_some_lazy!(self.tables.explicit_clauses_of[def_id] <- self.tcx.explicit_clauses_of(def_id)) ++ 3 3 items record_some_lazy!(self.tables.expn_that_defined[def_id] <- self.tcx.expn_that_defined(def_id)) ++ 2 2 items record_some_lazy!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id)) ++ 9 9 items record_some_lazy!(self.tables.generics_of[def_id] <- g) ++ 1 1 items record_some_lazy!(self.tables.impl_trait_header[def_id] <- header) ++ 1 1 items record_some_lazy!(self.tables.mir_const_qualif[def_id.to_def_id()] <- qualifs) ++ 1 1 items record_some_lazy!(self.tables.mir_for_ctfe[def_id.to_def_id()] <- tcx.mir_for_ctfe(def_id)) ++ 1 1 items record_some_lazy!(self.tables.object_lifetime_default[def_id] <- default) ++ 1 1 items record_some_lazy!(self.tables.optimized_mir[def_id.to_def_id()] <- tcx.optimized_mir(def_id)) ++ 1 1 items record_some_lazy!(self.tables.params_in_repr[def_id] <- params_in_repr) ++ 2 2 items record_some_lazy!(self.tables.promoted_mir[def_id.to_def_id()] <- tcx.promoted_mir(def_id)) ++ 1 1 items record_some_lazy!(self.tables.rendered_const[def_id.to_def_id()] <- const_data) ++ 1 1 items record_some_lazy!(self.tables.repr_options[def_id] <- adt_def.repr()) ++ 8 8 items record_some_lazy!(self.tables.type_of[def_id] <- self.tcx.type_of(def_id)) ++ 1 1 items record_some_lazy!(self.tables.variant_data[variant.def_id] <- data) ++ 7 7 items record_some_lazy!(self.tables.visibility[def_id] <- vis) ++ 2 2 items record_value!(self.tables.asyncness[def_id] <- asyncness) ++ 11 11 items record_value!(self.tables.attr_flags[def_id.to_def_id()] <- attr_flags) ++ 2 2 items record_value!(self.tables.constness[def_id] <- constness) ++ 1 1 items record_value!(self.tables.cross_crate_inlinable[def_id.to_def_id()] <- self.tcx.cross_crate_inlinable(def_id)) ++ 16 16 items record_value!(self.tables.def_path_hashes[def_id] <- def_path_hash.local_hash().as_u64()) ++ 1 1 items record_value!(self.tables.defaultness[def_id] <- item.defaultness(tcx)) ++ 1 1 items record_value!(self.tables.defaultness[def_id] <- tcx.defaultness(def_id)) ++ 1 1 items record_value!(self.tables.impl_is_fully_generic_for_reflection[def_id] <- impl_is_fully_generic_for_reflection) ++ 2 2 items record_value!(self.tables.safety[field.did] <- field.safety) ++ 1 1 items record_value!(self.tables.type_alias_is_checked[def_id] <- self.tcx.type_alias_is_checked(def_id)) ++ 146 0 items self.set(i, Some(value)) ++ 2 2 items syntax_contexts.set_some(index, this.lazy(ctxt_data)) + read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote + 19 19 items 19 tracked canonical_symbols + 2 1 items 1 tracked codegen_fn_attrs +@@ + 19 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 2 1 items 1 tracked impl_trait_header ++ 1 1 items 1 tracked lookup_deprecation_entry ++ 2 1 items 1 tracked lookup_stability + 19 19 items 19 tracked missing_lang_items + 2076 37 items 37 tracked module_children + 23 19 items 19 tracked native_libraries + 2 1 items 1 tracked type_of + 118 59 items 59 tracked visibility ++ 2 1 items 1 tracked none written base associated_types_for_impl_traits_in_trait_or_impl + 2 1 items 1 tracked base attrs_for_def + 1 1 items 1 tracked base canonical_symbols +- 2 1 items 1 tracked base codegen_fn_attrs +- 1 1 items 1 tracked base cross_crate_inlinable +- 1 1 items 1 tracked base def_kind ++ 2 1 items 1 tracked none written base codegen_fn_attrs ++ 1 1 items 1 tracked none written base constness ++ 1 1 items 1 tracked none written base cross_crate_inlinable ++ 1 1 items 1 tracked none written base def_kind + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items +- 2 1 items 1 tracked base generics_of ++ 2 1 items 1 tracked none written base generics_of ++ 5 5 items 5 tracked base lookup_deprecation_entry ++ 6 6 items 6 tracked base lookup_stability + 1 1 items 1 tracked base missing_lang_items + 97 2 items 2 tracked base module_children + 1 1 items 1 tracked base native_libraries +- 6 3 items 3 tracked base visibility ++ 2 1 items 1 tracked base trait_def ++ 6 3 items 3 tracked none written base visibility + read outside a query + 61 CrateMetadata::def_kind in - +- 3325 CrateMetadata::def_path_hash in - ++ 3322 CrateMetadata::def_path_hash in - + 122 CrateMetadata::get_expn_that_defined in - + 1136 CrateMetadata::get_span in - + 20 CrateRoot>::decode_denied_partial_mitigations in - +@@ + 38 MetadataBlob::get_root in CStore::register_crate + 40 MetadataBlob::get_root_unhashed in CStore::register_crate + 43 new::{closure#1} in CStore::register_crate +- 24 CrateMetadata::def_path_hash in encoder::encode_metadata ++ 67 CrateMetadata::def_path_hash in encoder::encode_metadata + 6 def_key::{closure#0} in encoder::encode_metadata + +mirth: the record differs from /home/exedev/mirth/tests/rmeta/chain.touch.txt; rerun with --bless to accept it +== P6: an incremental rebuild after an edit +P6 broken: the incremental rebuild's .rmeta files differ from a clean build's +2c2 +< e1dfe1c8c7bfa1d791a65b62d4ec9e5cb6e64d69050efda73868cfbec509d6c1 ./debug/build/mid/b728536ffc6a92a7/out/libmid-b728536ffc6a92a7.rmeta +--- +> fc58be1f55ebdacf690004b0691dfeaf08280adac53675e64163d187af10f1dd ./debug/build/mid/b728536ffc6a92a7/out/libmid-b728536ffc6a92a7.rmeta +check.sh exit 1 + +existing tests (tests/incremental; tests/ui/{deprecation,crate-loading,rmeta,extern,cross-crate}; +43 metadata-related tests/run-make): + test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + test result: ok. 532 passed; 0 failed; 6 ignored; 0 measured; 21985 filtered out + test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 497 filtered out +suites.sh exit 0 diff --git a/docs/regressions/143247-forever-red.txt b/docs/regressions/143247-forever-red.txt new file mode 100644 index 0000000..7ff918a --- /dev/null +++ b/docs/regressions/143247-forever-red.txt @@ -0,0 +1,299 @@ +# 143247-forever-red + +== clean build +P1 P2 P4 P7 hold +== P5: a second clean build +P5 holds: 2 .rmeta files identical +== P5 under the parallel front end (-Zthreads=8) +P5 holds with -Zthreads=8: 2 .rmeta files identical +== an incremental rebuild after touching every source file +--- /home/exedev/mirth/tests/rmeta/chain.touch.txt ++++ this build +@@ + 136 68 items 68 tracked visibility + 11 5 items 5 tracked base attrs_for_def + 1 1 items 1 tracked base canonical_symbols +- 12 6 items 6 tracked base codegen_fn_attrs +- 5 5 items 5 tracked base cross_crate_inlinable ++ 12 6 items 6 tracked 6 written base codegen_fn_attrs ++ 5 5 items 5 tracked 5 written base cross_crate_inlinable + 1 1 items 1 tracked base debugger_visualizers +- 11 11 items 11 tracked base def_kind ++ 11 11 items 11 tracked 11 written base def_kind + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items + 1 1 items 1 tracked base exported_generic_symbols + 1 1 items 1 tracked base exported_non_generic_symbols +- 2 1 items 1 tracked base fn_sig +- 2 1 items 1 tracked base generics_of ++ 2 1 items 1 tracked 1 written base fn_sig ++ 2 1 items 1 tracked 1 written base generics_of + 1 1 items 1 tracked base missing_lang_items + 107 3 items 3 tracked base module_children + 1 1 items 1 tracked base native_libraries +- 2 1 items 1 tracked base type_of +- 6 3 items 3 tracked base visibility ++ 2 1 items 1 tracked 1 written base type_of ++ 6 3 items 3 tracked 3 written base visibility + 2 1 items 1 tracked mid attrs_for_def + 1 1 items 1 tracked mid canonical_symbols +- 2 1 items 1 tracked mid codegen_fn_attrs +- 1 1 items 1 tracked mid cross_crate_inlinable ++ 2 1 items 1 tracked 1 written mid codegen_fn_attrs ++ 1 1 items 1 tracked 1 written mid cross_crate_inlinable + 1 1 items 1 tracked mid debugger_visualizers +- 1 1 items 1 tracked mid def_kind ++ 1 1 items 1 tracked 1 written mid def_kind + 1 1 items 1 tracked mid defined_lang_items + 1 1 items 1 tracked mid diagnostic_items + 1 1 items 1 tracked mid exported_generic_symbols + 1 1 items 1 tracked mid exported_non_generic_symbols +- 4 2 items 2 tracked mid generics_of ++ 4 2 items 2 tracked 2 written mid generics_of + 1 1 items 1 tracked mid missing_lang_items + 31 1 items 1 tracked mid module_children + 1 1 items 1 tracked mid native_libraries +- 2 1 items 1 tracked mid visibility ++ 2 1 items 1 tracked 1 written mid visibility + read outside a query + 87 CrateMetadata::def_kind in - + 8609 CrateMetadata::def_path_hash in - +@@ + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - + create target/debug/build/base/#/out/rmeta* in fs::encode_and_write_metadata +- open target/debug/incremental/base-#/s-*/metadata.rmeta in encoder::encode_metadata ++ encode-to target/debug/build/base/#/out/rmeta*/full.rmeta in encoder::encode_metadata ++ finished in encoder::encode_metadata + encode-to target/debug/build/base/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata + remove_file target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata +@@ + remove_dir_all target/debug/build/base/#/out/.tmp*.temp-archive in - + remove_dir_all target/debug/build/base/#/out/rustc* in - + remove_dir_all target/debug/build/base/#/out/rmeta* in - ++encoded ++ 1 1 items adapted.set_some(on_disk_index, self.lazy(adapted_source_file)) ++ 15 15 items expn_data_table .set_some(index.as_raw(), this.lazy(expn_data.expect("local expn"))) ++ 15 15 items expn_hash_table.set_some(index.as_raw(), this.lazy(hash)) ++ 1 1 items record_array!( self.tables.assumed_wf_types_for_rpitit[def_id] <- self.tcx.assumed_wf_types_for_rpitit(def_id) ) ++ 10 10 items record_array!(self.tables.associated_item_or_field_def_ids[def_id] <- associated_item_def_ids.iter().map(|&def_id| { assert!(def_id.is_local()); def_id.index }) ++ 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[variant.def_id] <- variant.fields.iter().map(|f| { assert!(f.did.is_local()); f.did.index })) ++ 33 33 items record_array!(self.tables.attributes[def_id.to_def_id()] <- attr_iter) ++ 13 13 items record_array!(self.tables.fn_arg_idents[def_id] <- tcx.fn_arg_idents(def_id)) ++ 2 1 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().filter(|child| child.reexport_chain.is_empty()) .map(|child| child.res ++ 2 2 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().map(|child| child.res.def_id().index)) ++ 19 19 items record_array!(self.tables.variances_of[def_id] <- v) ++ 2 1 items record_defaulted_array!(self.tables.ambig_module_children[def_id] <- ambig_module_children) ++ 2 2 items record_defaulted_array!(self.tables.explicit_implied_clauses_of[def_id] <- self.tcx.explicit_implied_clauses_of(def_id).skip_binder()) ++ 4 4 items record_defaulted_array!(self.tables.explicit_item_bounds[def_id] <- bounds) ++ 4 4 items record_defaulted_array!(self.tables.explicit_item_self_bounds[def_id] <- bounds) ++ 2 2 items record_defaulted_array!(self.tables.explicit_super_clauses_of[def_id] <- self.tcx.explicit_super_clauses_of(def_id).skip_binder()) ++ 37 37 items record_defaulted_array!(self.tables.inferred_outlives_of[def_id] <- inferred_outlives) ++ 2 1 items record_defaulted_array!(self.tables.module_children_reexports[def_id] <- module_children.iter().filter(|child| !child.reexport_chain.is_empty())) ++ 1 1 items record_some!( self.tables.coroutine_by_move_body_def_id[coroutine_for_closure] <- id.into() ) ++ 1 1 items record_some!(self.tables.coroutine_for_closure[def_id] <- coroutine_for_closure.into()) ++ 54 54 items record_some!(self.tables.def_kind[def_id] <- def_kind) ++ 1 1 items record_some_lazy!( self.tables.mut_restriction[field.did] <- field.mut_restriction ) ++ 4 4 items record_some_lazy!(self.tables.args_known_to_outlive_alias_params[def_id] <- tcx.args_known_to_outlive_alias_params(def_id)) ++ 10 10 items record_some_lazy!(self.tables.assoc_container[def_id] <- item.container) ++ 10 10 items record_some_lazy!(self.tables.associated_types_for_impl_traits_in_trait_or_impl[def_id] <- table) ++ 10 10 items record_some_lazy!(self.tables.closure_saved_names_of_captured_variables[def_id.to_def_id()] <- tcx.closure_saved_names_of_captured_variables(def_id)) ++ 18 18 items record_some_lazy!(self.tables.codegen_fn_attrs[def_id] <- self.tcx.codegen_fn_attrs(def_id)) ++ 1 1 items record_some_lazy!(self.tables.collect_return_position_impl_trait_in_trait_tys[def_id] <- table) ++ 1 1 items record_some_lazy!(self.tables.const_conditions[def_id] <- self.tcx.const_conditions(def_id)) ++ 1 1 items record_some_lazy!(self.tables.const_of_item[def_id] <- self.tcx.const_of_item(def_id)) ++ 37 37 items record_some_lazy!(self.tables.def_ident_span[def_id] <- ident_span) ++ 54 54 items record_some_lazy!(self.tables.def_keys[def_id] <- def_key) ++ 54 54 items record_some_lazy!(self.tables.def_span[def_id] <- def_span) ++ 37 37 items record_some_lazy!(self.tables.explicit_clauses_of[def_id] <- self.tcx.explicit_clauses_of(def_id)) ++ 12 12 items record_some_lazy!(self.tables.expn_that_defined[def_id] <- self.tcx.expn_that_defined(def_id)) ++ 14 14 items record_some_lazy!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id)) ++ 1 1 items record_some_lazy!(self.tables.fn_sig[variant.def_id] <- fn_sig) ++ 37 37 items record_some_lazy!(self.tables.generics_of[def_id] <- g) ++ 8 8 items record_some_lazy!(self.tables.impl_trait_header[def_id] <- header) ++ 1 1 items record_some_lazy!(self.tables.lookup_deprecation_entry[def_id] <- depr) ++ 1 1 items record_some_lazy!(self.tables.mir_const_qualif[def_id.to_def_id()] <- qualifs) ++ 4 2 items record_some_lazy!(self.tables.mir_coroutine_witnesses[def_id.to_def_id()] <- witnesses) ++ 1 1 items record_some_lazy!(self.tables.mir_for_ctfe[def_id.to_def_id()] <- tcx.mir_for_ctfe(def_id)) ++ 3 3 items record_some_lazy!(self.tables.object_lifetime_default[def_id] <- default) ++ 3 3 items record_some_lazy!(self.tables.opaque_ty_origin[def_id] <- self.tcx.opaque_ty_origin(def_id)) ++ 2 2 items record_some_lazy!(self.tables.opt_rpitit_info[def_id] <- rpitit_info) ++ 10 10 items record_some_lazy!(self.tables.optimized_mir[def_id.to_def_id()] <- tcx.optimized_mir(def_id)) ++ 1 1 items record_some_lazy!(self.tables.params_in_repr[def_id] <- params_in_repr) ++ 11 11 items record_some_lazy!(self.tables.promoted_mir[def_id.to_def_id()] <- tcx.promoted_mir(def_id)) ++ 1 1 items record_some_lazy!(self.tables.rendered_const[def_id.to_def_id()] <- const_data) ++ 1 1 items record_some_lazy!(self.tables.repr_options[def_id] <- adt_def.repr()) ++ 2 2 items record_some_lazy!(self.tables.trait_def[def_id] <- self.tcx.trait_def(def_id)) ++ 1 1 items record_some_lazy!(self.tables.trivial_const[def_id.to_def_id()] <- (val, ty)) ++ 32 32 items record_some_lazy!(self.tables.type_of[def_id] <- self.tcx.type_of(def_id)) ++ 1 1 items record_some_lazy!(self.tables.variant_data[variant.def_id] <- data) ++ 22 22 items record_some_lazy!(self.tables.visibility[def_id] <- vis) ++ 13 13 items record_value!(self.tables.asyncness[def_id] <- asyncness) ++ 33 33 items record_value!(self.tables.attr_flags[def_id.to_def_id()] <- attr_flags) ++ 17 17 items record_value!(self.tables.constness[def_id] <- constness) ++ 2 2 items record_value!(self.tables.coroutine_kind[def_id] <- Some(coroutine_kind)) ++ 10 10 items record_value!(self.tables.cross_crate_inlinable[def_id.to_def_id()] <- self.tcx.cross_crate_inlinable(def_id)) ++ 54 54 items record_value!(self.tables.def_path_hashes[def_id] <- def_path_hash.local_hash().as_u64()) ++ 10 10 items record_value!(self.tables.defaultness[def_id] <- item.defaultness(tcx)) ++ 8 8 items record_value!(self.tables.defaultness[def_id] <- tcx.defaultness(def_id)) ++ 8 8 items record_value!(self.tables.impl_is_fully_generic_for_reflection[def_id] <- impl_is_fully_generic_for_reflection) ++ 1 1 items record_value!(self.tables.safety[field.did] <- field.safety) ++ 590 0 items self.set(i, Some(value)) ++ 15 15 items syntax_contexts.set_some(index, this.lazy(ctxt_data)) + read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote + 7 1 items 1 tracked associated_item ++ 12 6 items 6 tracked associated_types_for_impl_traits_in_trait_or_impl + 6 2 items 2 tracked attrs_for_def + 19 19 items 19 tracked canonical_symbols + 36 18 items 18 tracked codegen_fn_attrs + 2 1 items 1 tracked const_conditions +- 1 1 items 1 tracked constness ++ 4 4 items 4 tracked constness + 18 18 items 18 tracked cross_crate_inlinable + 63 63 items 63 tracked def_kind + 2 1 items 1 tracked def_span +@@ + 19 19 items 19 tracked missing_lang_items + 4145 47 items 47 tracked module_children + 23 19 items 19 tracked native_libraries +- 4 2 items 2 tracked trait_def ++ 14 7 items 7 tracked trait_def + 18 9 items 9 tracked type_of + 150 75 items 75 tracked visibility + read outside a query + 148 CrateMetadata::def_kind in - +- 8717 CrateMetadata::def_path_hash in - ++ 8699 CrateMetadata::def_path_hash in - + 144 CrateMetadata::get_expn_that_defined in - + 14 CrateMetadata::get_item_attrs in - + 21 CrateMetadata::get_macro in - +@@ + 37 MetadataBlob::get_root in CStore::register_crate + 38 MetadataBlob::get_root_unhashed in CStore::register_crate + 43 new::{closure#1} in CStore::register_crate +- 258 CrateMetadata::def_path_hash in encoder::encode_metadata ++ 327 CrateMetadata::def_path_hash in encoder::encode_metadata + 15 CrateMetadata::expn_hash_to_expn_id in encoder::encode_metadata + 4 decode_expn_id::{closure#0} in encoder::encode_metadata + 2 decode_syntax_context::{closure#0} in encoder::encode_metadata +@@ + open target/debug/build/base/#/out/libbase-#.rmeta in - + open target/debug/build/base/#/out/libbase-#.rmeta in - + create target/debug/build/mid/#/out/rmeta* in fs::encode_and_write_metadata +- open target/debug/incremental/mid-#/s-*/metadata.rmeta in encoder::encode_metadata ++ encode-to target/debug/build/mid/#/out/rmeta*/full.rmeta in encoder::encode_metadata ++ finished in encoder::encode_metadata + encode-to target/debug/build/mid/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata + remove_file target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata +@@ + remove_dir_all target/debug/build/mid/#/out/.tmp*.temp-archive in - + remove_dir_all target/debug/build/mid/#/out/rustc* in - + remove_dir_all target/debug/build/mid/#/out/rmeta* in - ++encoded ++ 1 1 items adapted.set_some(on_disk_index, self.lazy(adapted_source_file)) ++ 2 2 items expn_data_table .set_some(index.as_raw(), this.lazy(expn_data.expect("local expn"))) ++ 2 2 items expn_hash_table.set_some(index.as_raw(), this.lazy(hash)) ++ 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[def_id] <- associated_item_def_ids.iter().map(|&def_id| { assert!(def_id.is_local()); def_id.index }) ++ 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[variant.def_id] <- variant.fields.iter().map(|f| { assert!(f.did.is_local()); f.did.index })) ++ 11 11 items record_array!(self.tables.attributes[def_id.to_def_id()] <- attr_iter) ++ 1 1 items record_array!(self.tables.doc_link_traits_in_scope[def_id.to_def_id()] <- traits) ++ 2 2 items record_array!(self.tables.fn_arg_idents[def_id] <- tcx.fn_arg_idents(def_id)) ++ 2 1 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().filter(|child| child.reexport_chain.is_empty()) .map(|child| child.res ++ 3 3 items record_array!(self.tables.variances_of[def_id] <- v) ++ 2 1 items record_defaulted_array!(self.tables.ambig_module_children[def_id] <- ambig_module_children) ++ 9 9 items record_defaulted_array!(self.tables.inferred_outlives_of[def_id] <- inferred_outlives) ++ 2 1 items record_defaulted_array!(self.tables.module_children_reexports[def_id] <- module_children.iter().filter(|child| !child.reexport_chain.is_empty())) ++ 16 16 items record_some!(self.tables.def_kind[def_id] <- def_kind) ++ 2 2 items record_some_lazy!( self.tables.mut_restriction[field.did] <- field.mut_restriction ) ++ 1 1 items record_some_lazy!(self.tables.anon_const_kind[def_id] <- self.tcx.anon_const_kind(def_id)) ++ 1 1 items record_some_lazy!(self.tables.assoc_container[def_id] <- item.container) ++ 1 1 items record_some_lazy!(self.tables.associated_types_for_impl_traits_in_trait_or_impl[def_id] <- table) ++ 1 1 items record_some_lazy!(self.tables.closure_saved_names_of_captured_variables[def_id.to_def_id()] <- tcx.closure_saved_names_of_captured_variables(def_id)) ++ 2 2 items record_some_lazy!(self.tables.codegen_fn_attrs[def_id] <- self.tcx.codegen_fn_attrs(def_id)) ++ 12 12 items record_some_lazy!(self.tables.def_ident_span[def_id] <- ident_span) ++ 16 16 items record_some_lazy!(self.tables.def_keys[def_id] <- def_key) ++ 16 16 items record_some_lazy!(self.tables.def_span[def_id] <- def_span) ++ 1 1 items record_some_lazy!(self.tables.doc_link_resolutions[def_id.to_def_id()] <- res_map) ++ 9 9 items record_some_lazy!(self.tables.explicit_clauses_of[def_id] <- self.tcx.explicit_clauses_of(def_id)) ++ 3 3 items record_some_lazy!(self.tables.expn_that_defined[def_id] <- self.tcx.expn_that_defined(def_id)) ++ 2 2 items record_some_lazy!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id)) ++ 9 9 items record_some_lazy!(self.tables.generics_of[def_id] <- g) ++ 1 1 items record_some_lazy!(self.tables.impl_trait_header[def_id] <- header) ++ 1 1 items record_some_lazy!(self.tables.mir_const_qualif[def_id.to_def_id()] <- qualifs) ++ 1 1 items record_some_lazy!(self.tables.mir_for_ctfe[def_id.to_def_id()] <- tcx.mir_for_ctfe(def_id)) ++ 1 1 items record_some_lazy!(self.tables.object_lifetime_default[def_id] <- default) ++ 1 1 items record_some_lazy!(self.tables.optimized_mir[def_id.to_def_id()] <- tcx.optimized_mir(def_id)) ++ 1 1 items record_some_lazy!(self.tables.params_in_repr[def_id] <- params_in_repr) ++ 2 2 items record_some_lazy!(self.tables.promoted_mir[def_id.to_def_id()] <- tcx.promoted_mir(def_id)) ++ 1 1 items record_some_lazy!(self.tables.rendered_const[def_id.to_def_id()] <- const_data) ++ 1 1 items record_some_lazy!(self.tables.repr_options[def_id] <- adt_def.repr()) ++ 8 8 items record_some_lazy!(self.tables.type_of[def_id] <- self.tcx.type_of(def_id)) ++ 1 1 items record_some_lazy!(self.tables.variant_data[variant.def_id] <- data) ++ 7 7 items record_some_lazy!(self.tables.visibility[def_id] <- vis) ++ 2 2 items record_value!(self.tables.asyncness[def_id] <- asyncness) ++ 11 11 items record_value!(self.tables.attr_flags[def_id.to_def_id()] <- attr_flags) ++ 2 2 items record_value!(self.tables.constness[def_id] <- constness) ++ 1 1 items record_value!(self.tables.cross_crate_inlinable[def_id.to_def_id()] <- self.tcx.cross_crate_inlinable(def_id)) ++ 16 16 items record_value!(self.tables.def_path_hashes[def_id] <- def_path_hash.local_hash().as_u64()) ++ 1 1 items record_value!(self.tables.defaultness[def_id] <- item.defaultness(tcx)) ++ 1 1 items record_value!(self.tables.defaultness[def_id] <- tcx.defaultness(def_id)) ++ 1 1 items record_value!(self.tables.impl_is_fully_generic_for_reflection[def_id] <- impl_is_fully_generic_for_reflection) ++ 2 2 items record_value!(self.tables.safety[field.did] <- field.safety) ++ 1 1 items record_value!(self.tables.type_alias_is_checked[def_id] <- self.tcx.type_alias_is_checked(def_id)) ++ 146 0 items self.set(i, Some(value)) ++ 2 2 items syntax_contexts.set_some(index, this.lazy(ctxt_data)) + read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote + 19 19 items 19 tracked canonical_symbols + 2 1 items 1 tracked codegen_fn_attrs +@@ + 23 19 items 19 tracked native_libraries + 2 1 items 1 tracked type_of + 118 59 items 59 tracked visibility ++ 2 1 items 1 tracked 1 written base associated_types_for_impl_traits_in_trait_or_impl + 2 1 items 1 tracked base attrs_for_def + 1 1 items 1 tracked base canonical_symbols +- 2 1 items 1 tracked base codegen_fn_attrs +- 1 1 items 1 tracked base cross_crate_inlinable +- 1 1 items 1 tracked base def_kind ++ 2 1 items 1 tracked 1 written base codegen_fn_attrs ++ 1 1 items 1 tracked 1 written base constness ++ 1 1 items 1 tracked 1 written base cross_crate_inlinable ++ 1 1 items 1 tracked 1 written base def_kind + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items +- 2 1 items 1 tracked base generics_of ++ 2 1 items 1 tracked 1 written base generics_of + 1 1 items 1 tracked base missing_lang_items + 97 2 items 2 tracked base module_children + 1 1 items 1 tracked base native_libraries +- 6 3 items 3 tracked base visibility ++ 2 1 items 1 tracked 1 written base trait_def ++ 6 3 items 3 tracked 3 written base visibility + read outside a query + 61 CrateMetadata::def_kind in - +- 3325 CrateMetadata::def_path_hash in - ++ 3309 CrateMetadata::def_path_hash in - + 122 CrateMetadata::get_expn_that_defined in - + 1136 CrateMetadata::get_span in - + 20 CrateRoot>::decode_denied_partial_mitigations in - +@@ + 38 MetadataBlob::get_root in CStore::register_crate + 40 MetadataBlob::get_root_unhashed in CStore::register_crate + 43 new::{closure#1} in CStore::register_crate +- 24 CrateMetadata::def_path_hash in encoder::encode_metadata ++ 67 CrateMetadata::def_path_hash in encoder::encode_metadata + 6 def_key::{closure#0} in encoder::encode_metadata + +mirth: the record differs from /home/exedev/mirth/tests/rmeta/chain.touch.txt; rerun with --bless to accept it +== P6: an incremental rebuild after an edit +P6 holds: incremental and clean .rmeta files identical +check.sh exit 1 + +existing tests (tests/incremental; tests/ui/{deprecation,crate-loading,rmeta,extern,cross-crate}; +43 metadata-related tests/run-make): + test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + test result: ok. 532 passed; 0 failed; 6 ignored; 0 measured; 21985 filtered out + test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 497 filtered out +suites.sh exit 0 diff --git a/docs/regressions/144050-no-mangle-cross-crate.txt b/docs/regressions/144050-no-mangle-cross-crate.txt new file mode 100644 index 0000000..dea3b17 --- /dev/null +++ b/docs/regressions/144050-no-mangle-cross-crate.txt @@ -0,0 +1,19 @@ +# 144050-no-mangle-cross-crate + +== clean build +P1 P2 P4 P7 hold +== P5: a second clean build +P5 holds: 2 .rmeta files identical +== P5 under the parallel front end (-Zthreads=8) +P5 holds with -Zthreads=8: 2 .rmeta files identical +== an incremental rebuild after touching every source file +== P6: an incremental rebuild after an edit +P6 holds: incremental and clean .rmeta files identical +check.sh exit 0 + +existing tests (tests/incremental; tests/ui/{deprecation,crate-loading,rmeta,extern,cross-crate}; +43 metadata-related tests/run-make): + test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + test result: ok. 532 passed; 0 failed; 6 ignored; 0 measured; 21985 filtered out + test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 497 filtered out +suites.sh exit 0 diff --git a/docs/regressions/162910-defpathhashmap-order.txt b/docs/regressions/162910-defpathhashmap-order.txt new file mode 100644 index 0000000..c33bafb --- /dev/null +++ b/docs/regressions/162910-defpathhashmap-order.txt @@ -0,0 +1,19 @@ +# 162910-defpathhashmap-order + +== clean build +P1 P2 P4 P7 hold +== P5: a second clean build +P5 holds: 2 .rmeta files identical +== P5 under the parallel front end (-Zthreads=8) +P5 holds with -Zthreads=8: 2 .rmeta files identical +== an incremental rebuild after touching every source file +== P6: an incremental rebuild after an edit +P6 holds: incremental and clean .rmeta files identical +check.sh exit 0 + +existing tests (tests/incremental; tests/ui/{deprecation,crate-loading,rmeta,extern,cross-crate}; +43 metadata-related tests/run-make): + test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + test result: ok. 532 passed; 0 failed; 6 ignored; 0 measured; 21985 filtered out + test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 497 filtered out +suites.sh exit 0 diff --git a/docs/regressions/82047-remove-before-rename.txt b/docs/regressions/82047-remove-before-rename.txt new file mode 100644 index 0000000..081c5d9 --- /dev/null +++ b/docs/regressions/82047-remove-before-rename.txt @@ -0,0 +1,57 @@ +# 82047-remove-before-rename + +== clean build +--- /home/exedev/mirth/tests/rmeta/chain.txt ++++ this build +@@ + finished in encoder::encode_metadata + encode-to target/debug/build/base/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata +- remove_file target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + rename target/debug/build/base/#/out/rmeta*/full.rmeta -> target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + open target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + create target/debug/build/base/#/out/rustc* in - +@@ + finished in encoder::encode_metadata + encode-to target/debug/build/mid/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata +- remove_file target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + rename target/debug/build/mid/#/out/rmeta*/full.rmeta -> target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + open target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + create target/debug/build/mid/#/out/rustc* in - +mirth: the record differs from /home/exedev/mirth/tests/rmeta/chain.txt; rerun with --bless to accept it +P1 P2 P4 P7 hold +== P5: a second clean build +P5 holds: 2 .rmeta files identical +== P5 under the parallel front end (-Zthreads=8) +P5 holds with -Zthreads=8: 2 .rmeta files identical +== an incremental rebuild after touching every source file +--- /home/exedev/mirth/tests/rmeta/chain.touch.txt ++++ this build +@@ + open target/debug/incremental/base-#/s-*/metadata.rmeta in encoder::encode_metadata + encode-to target/debug/build/base/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata +- remove_file target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + rename target/debug/build/base/#/out/rmeta*/full.rmeta -> target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + open target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + create target/debug/build/base/#/out/rustc* in - +@@ + open target/debug/incremental/mid-#/s-*/metadata.rmeta in encoder::encode_metadata + encode-to target/debug/build/mid/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata +- remove_file target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + rename target/debug/build/mid/#/out/rmeta*/full.rmeta -> target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + open target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + create target/debug/build/mid/#/out/rustc* in - +mirth: the record differs from /home/exedev/mirth/tests/rmeta/chain.touch.txt; rerun with --bless to accept it +== P6: an incremental rebuild after an edit +P6 holds: incremental and clean .rmeta files identical +check.sh exit 1 + +existing tests (tests/incremental; tests/ui/{deprecation,crate-loading,rmeta,extern,cross-crate}; +43 metadata-related tests/run-make): + test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + test result: ok. 532 passed; 0 failed; 6 ignored; 0 measured; 21985 filtered out + test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 497 filtered out +suites.sh exit 0 diff --git a/docs/regressions/none.txt b/docs/regressions/none.txt new file mode 100644 index 0000000..be7daa3 --- /dev/null +++ b/docs/regressions/none.txt @@ -0,0 +1,19 @@ +# none + +== clean build +P1 P2 P4 P7 hold +== P5: a second clean build +P5 holds: 2 .rmeta files identical +== P5 under the parallel front end (-Zthreads=8) +P5 holds with -Zthreads=8: 2 .rmeta files identical +== an incremental rebuild after touching every source file +== P6: an incremental rebuild after an edit +P6 holds: incremental and clean .rmeta files identical +check.sh exit 0 + +existing tests (tests/incremental; tests/ui/{deprecation,crate-loading,rmeta,extern,cross-crate}; +43 metadata-related tests/run-make): + test result: ok. 180 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + test result: ok. 532 passed; 0 failed; 6 ignored; 0 measured; 21985 filtered out + test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 497 filtered out +suites.sh exit 0 diff --git a/fixtures/chain/base/src/lib.rs b/fixtures/chain/base/src/lib.rs index ef9c227..e604eb1 100644 --- a/fixtures/chain/base/src/lib.rs +++ b/fixtures/chain/base/src/lib.rs @@ -1,6 +1,7 @@ //! The bottom of the chain: a constant, a trait with a default method, a //! struct and its impl, a generic function, an `#[inline]` function and a -//! deprecated one, for dependents to read. +//! deprecated one, an async closure, a trait returning `impl Trait` and an +//! exported symbol, for dependents to read. pub const LIMIT: u32 = 100; @@ -34,3 +35,27 @@ pub fn clamp(value: u32) -> u32 { pub fn old_clamp(value: u32) -> u32 { clamp(value) } + +/// An async closure that borrows what it captures, so calling it by value +/// needs the separate by-move body rustc makes for it (#130201). +pub fn greeter(name: String) -> impl AsyncFn() -> usize { + async move || name.len() +} + +/// A trait whose method returns `impl Trait`, so rustc creates definitions +/// for the hidden types while it analyses the crate (#162910). +pub trait Label { + fn label(&self) -> impl std::fmt::Display; +} + +impl Label for Square { + fn label(&self) -> impl std::fmt::Display { + format!("square {}", self.0) + } +} + +/// An exported symbol; rustdoc reads its `#[no_mangle]` from metadata (#144050). +#[unsafe(no_mangle)] +pub extern "C" fn base_limit() -> u32 { + LIMIT +} diff --git a/fixtures/chain/mid/src/lib.rs b/fixtures/chain/mid/src/lib.rs index 7b9d682..2046b22 100644 --- a/fixtures/chain/mid/src/lib.rs +++ b/fixtures/chain/mid/src/lib.rs @@ -18,6 +18,17 @@ impl Shape for Rectangle { /// that constant does. pub type Buffer = [u8; base::LIMIT as usize]; +/// Sums the areas. See [`Shape`]. +/// +/// The reference definitions below are not used by any link: rustc resolves +/// them anyway, and their order once reached the metadata (#138678). +/// +/// [a]: base::clamp +/// [b]: base::largest +/// [c]: base::LIMIT +/// [d]: base::Square +/// [e]: crate::Rectangle +/// [f]: crate::Buffer pub fn total(shapes: &[T]) -> u32 { shapes.iter().map(Shape::area).sum() } diff --git a/fixtures/chain/src/main.rs b/fixtures/chain/src/main.rs index 731140e..52201b7 100644 --- a/fixtures/chain/src/main.rs +++ b/fixtures/chain/src/main.rs @@ -1,4 +1,22 @@ -use base::Shape; +use std::future::Future; +use std::pin::pin; +use std::task::{Context, Poll, Waker}; + +use base::{Label, Shape}; + +async fn call_once(f: impl AsyncFnOnce() -> usize) -> usize { + f().await +} + +fn block_on(future: F) -> F::Output { + let mut future = pin!(future); + let mut context = Context::from_waker(Waker::noop()); + loop { + if let Poll::Ready(output) = future.as_mut().poll(&mut context) { + return output; + } + } +} fn main() { let squares = [mid::Square(3), mid::Square(5)]; @@ -9,12 +27,16 @@ fn main() { }; let clamped = base::old_clamp(250); let buffer: mid::Buffer = [0; _]; + let greeting = block_on(call_once(base::greeter("chain".to_string()))); println!( - "{} {} {} {} {}", + "{} {} {} {} {} {} {} {}", largest.describe(), rectangle.area(), mid::total(&squares), clamped, buffer.len(), + greeting, + base::Square(2).label(), + base::base_limit(), ); } diff --git a/rustc/check.sh b/rustc/check.sh index 37caba2..15f6b32 100755 --- a/rustc/check.sh +++ b/rustc/check.sh @@ -5,6 +5,10 @@ # the list everything each process did with metadata, P3 among it, # against tests/rmeta/.txt # P5 a second clean build gives the same .rmeta bytes +# P5 threads the same, with the parallel front end (-Zthreads=8) +# touch an incremental rebuild after touching every source file, +# against tests/rmeta/.touch.txt: metadata should be +# reused from the incremental cache, not encoded again # P6 an incremental rebuild after fixtures//edit gives the # same .rmeta bytes as a clean build of the edited source # @@ -38,8 +42,9 @@ fresh() { } build() { - CARGO_INCREMENTAL=1 "$mirth" record --rustc "$rustc" --out "$work/$1.record" -- \ - cargo +"$TOOLCHAIN" build --manifest-path "$work/run/src/Cargo.toml" --target-dir "$work/run/target" + CARGO_INCREMENTAL=1 RUSTFLAGS="${THREADS:+-Zthreads=$THREADS}" "$mirth" record --rustc "$rustc" --out "$work/$1.record" -- \ + cargo +"$TOOLCHAIN" build --manifest-path "$work/run/src/Cargo.toml" --target-dir "$work/run/target" || + { grep -v '^ *Compiling' "$work/$1.record/stderr" | head -40; return 1; } } keep() { @@ -81,6 +86,29 @@ else failed=1 fi +echo "== P5 under the parallel front end (-Zthreads=8)" +fresh +THREADS=8 build a8 || exit 1 +keep a8 +fresh +THREADS=8 build b8 || exit 1 +keep b8 +if diff <(rmetas a8) <(rmetas b8) > "$work/p5-threads.diff"; then + echo "P5 holds with -Zthreads=8: $(rmetas a8 | wc -l) .rmeta files identical" +else + echo "P5 broken with -Zthreads=8: .rmeta files differ between two clean builds" + cat "$work/p5-threads.diff" + failed=1 +fi + +echo "== an incremental rebuild after touching every source file" +fresh +build inc-before || exit 1 +find "$work/run/src" -name '*.rs' -exec touch {} + +build touch || exit 1 +"$mirth" report --sites "$sites" --out "$work/touch.record" "${roots[@]}" \ + --expect "$repo/tests/rmeta/$fixture.touch.txt" "$@" || failed=1 + if [ -x "$repo/fixtures/$fixture/edit" ]; then echo "== P6: an incremental rebuild after an edit" fresh diff --git a/rustc/edits.sh b/rustc/edits.sh index 6f91d04..2ef107f 100755 --- a/rustc/edits.sh +++ b/rustc/edits.sh @@ -6,7 +6,8 @@ # # rustc/edits.sh [fixture] [edit…] # -# SUITES=0 skips rustc's own tests. +# SUITES=0 skips rustc's own tests. EDITS=regressions takes the patches from +# rustc/regressions instead, and writes to docs/regressions. set -uo pipefail here=$(cd "$(dirname "$0")" && pwd) repo=$(cd "$here/.." && pwd) @@ -14,22 +15,23 @@ repo=$(cd "$here/.." && pwd) fixture=${1:-chain} shift || true edits=("$@") +kind=${EDITS:-edits} if [ ${#edits[@]} -eq 0 ]; then edits=(none) - for patch in "$here"/edits/*.patch; do edits+=("$(basename "$patch" .patch)"); done + for patch in "$here/$kind"/*.patch; do edits+=("$(basename "$patch" .patch)"); done fi -mkdir -p "$repo/docs/edits" +mkdir -p "$repo/docs/$kind" restore() { - git -C "$MIRTH_RUST" checkout -q -- compiler library + git -C "$MIRTH_RUST" checkout -q -- compiler library Cargo.lock } trap restore EXIT for edit in "${edits[@]}"; do echo "== $edit" restore - [ "$edit" = none ] || git -C "$MIRTH_RUST" apply "$here/edits/$edit.patch" - out=$repo/docs/edits/$edit.txt + [ "$edit" = none ] || git -C "$MIRTH_RUST" apply "$here/$kind/$edit.patch" + out=$repo/docs/$kind/$edit.txt { echo "# $edit" echo diff --git a/rustc/regressions/122891-implied-clauses.patch b/rustc/regressions/122891-implied-clauses.patch new file mode 100644 index 0000000..e39b17d --- /dev/null +++ b/rustc/regressions/122891-implied-clauses.patch @@ -0,0 +1,31 @@ +--- a/compiler/rustc_metadata/src/rmeta/encoder.rs ++++ b/compiler/rustc_metadata/src/rmeta/encoder.rs +@@ -1571,8 +1571,6 @@ + record_some_lazy!(self.tables.trait_def[def_id] <- self.tcx.trait_def(def_id)); + record_defaulted_array!(self.tables.explicit_super_clauses_of[def_id] <- + self.tcx.explicit_super_clauses_of(def_id).skip_binder()); +- record_defaulted_array!(self.tables.explicit_implied_clauses_of[def_id] <- +- self.tcx.explicit_implied_clauses_of(def_id).skip_binder()); + let module_children = self.tcx.module_children_local(local_id); + record_array!(self.tables.module_children_non_reexports[def_id] <- + module_children.iter().map(|child| child.res.def_id().index)); +--- a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs ++++ b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs +@@ -234,7 +234,16 @@ + generics_of => { table } + inferred_outlives_of => { table_defaulted_array } + explicit_super_clauses_of => { table_defaulted_array } +- explicit_implied_clauses_of => { table_defaulted_array } ++ explicit_implied_clauses_of => { ++ let lazy = cdata.root.tables.explicit_implied_clauses_of.get(cdata, def_id.index); ++ if lazy.is_default() { ++ // Before #122891: a trait's implied clauses were taken to be its super clauses. ++ tcx.explicit_super_clauses_of(def_id) ++ } else { ++ let value: &[_] = tcx.arena.alloc_from_iter(lazy.decode((cdata, tcx))); ++ value.process_decoded(tcx, || unreachable!()) ++ } ++ } + type_of => { table } + type_alias_is_checked => { table_direct } + variances_of => { table } diff --git a/rustc/regressions/130201-by-move-body.patch b/rustc/regressions/130201-by-move-body.patch new file mode 100644 index 0000000..7b1d58b --- /dev/null +++ b/rustc/regressions/130201-by-move-body.patch @@ -0,0 +1,17 @@ +--- a/compiler/rustc_metadata/src/rmeta/encoder.rs ++++ b/compiler/rustc_metadata/src/rmeta/encoder.rs +@@ -1610,14 +1610,6 @@ + { + let coroutine_for_closure = self.tcx.coroutine_for_closure(def_id); + record_some!(self.tables.coroutine_for_closure[def_id] <- coroutine_for_closure.into()); +- +- // If this async closure has a by-move body, record it too. +- if tcx.needs_coroutine_by_move_body_def_id(coroutine_for_closure) { +- let id = self.tcx.coroutine_by_move_body_def_id(coroutine_for_closure); +- record_some!( +- self.tables.coroutine_by_move_body_def_id[coroutine_for_closure] <- id.into() +- ) +- } + } + if let DefKind::Static { .. } = def_kind { + if !self.tcx.is_foreign_item(def_id) { diff --git a/rustc/regressions/138678-doc-link-order.patch b/rustc/regressions/138678-doc-link-order.patch new file mode 100644 index 0000000..a5a18a5 --- /dev/null +++ b/rustc/regressions/138678-doc-link-order.patch @@ -0,0 +1,19 @@ +--- a/compiler/rustc_resolve/src/rustdoc.rs ++++ b/compiler/rustc_resolve/src/rustdoc.rs +@@ -1,7 +1,6 @@ + use std::mem; + use std::ops::Range; + +-use itertools::Itertools; + /// Re-export the markdown parser used by rustdoc. + pub use pulldown_cmark; + use pulldown_cmark::{ +@@ -478,7 +477,7 @@ + } + } + +- for (label, refdef) in event_iter.reference_definitions().iter().sorted_by_key(|x| x.0) { ++ for (label, refdef) in event_iter.reference_definitions().iter() { + if !refids.contains(label) { + links.push(preprocess_link(&refdef.dest)); + } diff --git a/rustc/regressions/143247-forever-red.patch b/rustc/regressions/143247-forever-red.patch new file mode 100644 index 0000000..3423f52 --- /dev/null +++ b/rustc/regressions/143247-forever-red.patch @@ -0,0 +1,14 @@ +--- a/compiler/rustc_middle/src/ty/context.rs ++++ b/compiler/rustc_middle/src/ty/context.rs +@@ -1371,8 +1371,9 @@ + } + + pub fn iter_local_def_id(self) -> impl Iterator { +- // Depend on the `analysis` query to ensure compilation if finished. +- self.ensure_ok().analysis(()); ++ // Create a dependency to the red node to be sure we re-execute this when the amount of ++ // definitions change. ++ self.dep_graph.read_index(DepNodeIndex::FOREVER_RED_NODE); + + let definitions = &self.untracked.definitions; + gen { diff --git a/rustc/regressions/144050-no-mangle-cross-crate.patch b/rustc/regressions/144050-no-mangle-cross-crate.patch new file mode 100644 index 0000000..ec08f68 --- /dev/null +++ b/rustc/regressions/144050-no-mangle-cross-crate.patch @@ -0,0 +1,20 @@ +--- a/compiler/rustc_attr_ir/src/encode_cross_crate.rs ++++ b/compiler/rustc_attr_ir/src/encode_cross_crate.rs +@@ -56,7 +56,7 @@ + Link(..) => No, + LinkName { .. } => Yes, // Needed for rustdoc + LinkOrdinal { .. } => No, +- LinkSection { .. } => Yes, // Needed for rustdoc ++ LinkSection { .. } => No, + Linkage(..) => No, + LoopMatch(..) => No, + MacroEscape => No, +@@ -75,7 +75,7 @@ + NoImplicitPrelude => No, + NoLink => No, + NoMain => No, +- NoMangle(..) => Yes, // Needed for rustdoc ++ NoMangle(..) => No, + NoStd => No, + NonExhaustive(..) => Yes, // Needed for rustdoc + OnConst { .. } => Yes, diff --git a/rustc/regressions/162910-defpathhashmap-order.patch b/rustc/regressions/162910-defpathhashmap-order.patch new file mode 100644 index 0000000..3f7b708 --- /dev/null +++ b/rustc/regressions/162910-defpathhashmap-order.patch @@ -0,0 +1,221 @@ +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -4421,7 +4421,6 @@ + "rustc_expand", + "rustc_feature", + "rustc_fs_util", +- "rustc_hashes", + "rustc_hir", + "rustc_hir_pretty", + "rustc_index", +--- a/compiler/rustc_hir_id/src/definitions.rs ++++ b/compiler/rustc_hir_id/src/definitions.rs +@@ -8,7 +8,6 @@ + use std::hash::Hash; + + use rustc_data_structures::fx::FxHashMap; +-use rustc_data_structures::sorted_map::SortedMap; + use rustc_data_structures::stable_hash::StableHasher; + use rustc_hashes::Hash64; + use rustc_index::IndexVec; +@@ -47,55 +46,13 @@ + } + } + +-#[derive(Debug, Default)] +-pub struct DefPathToIndexMap { +- /// Stores mapping from local hash to def indices which are allocated when the order +- /// of their allocation is deterministic (see where `commit_end_of_determinism` is called, +- /// at the moment of writing it is after prefetch of `hir_crate_items` in `run_required_analysis`). +- pub before_parallel_alloc: DefPathHashMap, +- +- /// Stores the same mapping as previous map but is used after the allocation order of def indices +- /// is not deterministic, so when serializing metadata we have a ready to use sorted by stable local +- /// hash (which does not change between compiler invocations) mapping. We use it for relatively small number +- /// of definitions, so the majority of them would be stored in `DefPathHashMap`, which makes insertion +- /// and serialization costs of `SortedMap` acceptable. +- pub after_parallel_alloc: Option>, +-} +- +-impl DefPathToIndexMap { +- #[inline] +- pub fn get(&self, hash: Hash64) -> Option { +- self.before_parallel_alloc +- .get(&hash) +- .or_else(|| self.after_parallel_alloc.as_ref().and_then(|map| map.get(&hash).copied())) +- } +- +- /// This insert function does not behave like regular `insert` of a `HashMap`, +- /// as the return value is used only for printing information about existing +- /// def index for local hash before panicking. So we can do not actually insert +- /// def index into `det_part` when we are in non-deterministic mode. +- #[inline] +- pub fn insert(&mut self, hash: Hash64, index: DefIndex) -> Option { +- match self.after_parallel_alloc.as_mut() { +- None => self.before_parallel_alloc.insert(&hash, &index), +- Some(map) => { +- if let Some(existing) = self.before_parallel_alloc.get(&hash) { +- return Some(existing); +- } +- +- map.insert(hash, index) +- } +- } +- } +-} +- + #[derive(Debug)] + pub struct Definitions { + stable_crate_id: StableCrateId, + def_id_to_key: IndexVec, + // We do only store the local hash, as all the definitions are from the current crate. + def_path_hashes: IndexVec, +- def_path_hash_to_index: DefPathToIndexMap, ++ def_path_hash_to_index: DefPathHashMap, + } + + /// A unique identifier that we can use to lookup a definition +@@ -292,15 +249,6 @@ + } + + impl Definitions { +- /// This function indicates that the order of def id allocations +- /// may be non-deterministic after it was called. +- pub fn commit_end_of_determinism(&mut self) { +- assert!( +- self.def_path_hash_to_index.after_parallel_alloc.replace(Default::default()).is_none(), +- "this function should be called only once" +- ) +- } +- + #[inline(always)] + pub fn def_key(&self, id: LocalDefId) -> DefKey { + self.def_id_to_key[id] +@@ -375,7 +323,7 @@ + // Check for hash collisions of DefPathHashes. These should be + // exceedingly rare. + if let Some(existing) = +- self.def_path_hash_to_index.insert(local_hash, def_id.local_def_index) ++ self.def_path_hash_to_index.insert(&local_hash, &def_id.local_def_index) + { + let def_path1 = self.def_path(LocalDefId { local_def_index: existing }); + let def_path2 = self.def_path(def_id); +@@ -463,11 +411,11 @@ + pub fn local_def_path_hash_to_def_id(&self, hash: DefPathHash) -> Option { + debug_assert!(hash.stable_crate_id() == self.stable_crate_id); + self.def_path_hash_to_index +- .get(hash.local_hash()) ++ .get(&hash.local_hash()) + .map(|local_def_index| LocalDefId { local_def_index }) + } + +- pub fn def_path_hash_to_def_index_map(&self) -> &DefPathToIndexMap { ++ pub fn def_path_hash_to_def_index_map(&self) -> &DefPathHashMap { + &self.def_path_hash_to_index + } + +--- a/compiler/rustc_interface/src/passes.rs ++++ b/compiler/rustc_interface/src/passes.rs +@@ -1104,8 +1104,6 @@ + // to use `hir_crate_items`. + tcx.ensure_done().hir_crate_items(()); + +- tcx.untracked().definitions.write().commit_end_of_determinism(); +- + rustc_passes::delegation::check_glob_and_list_delegations_target_expr(tcx); + + let sess = tcx.sess; +--- a/compiler/rustc_metadata/Cargo.toml ++++ b/compiler/rustc_metadata/Cargo.toml +@@ -18,7 +18,6 @@ + rustc_expand = { path = "../rustc_expand" } + rustc_feature = { path = "../rustc_feature" } + rustc_fs_util = { path = "../rustc_fs_util" } +-rustc_hashes = { path = "../rustc_hashes" } + rustc_hir = { path = "../rustc_hir" } + rustc_hir_pretty = { path = "../rustc_hir_pretty" } + rustc_index = { path = "../rustc_index" } +--- a/compiler/rustc_metadata/src/rmeta/def_path_hash_map.rs ++++ b/compiler/rustc_metadata/src/rmeta/def_path_hash_map.rs +@@ -1,8 +1,5 @@ + use rustc_data_structures::owned_slice::OwnedSlice; +-use rustc_data_structures::sorted_map::SortedMap; +-use rustc_hashes::Hash64; +-use rustc_hir::def_path_hash_map::Config as HashMapConfig; +-use rustc_hir::definitions::DefPathToIndexMap; ++use rustc_hir::def_path_hash_map::{Config as HashMapConfig, DefPathHashMap}; + use rustc_serialize::{Decodable, Decoder, Encodable, Encoder}; + use rustc_span::def_id::{DefIndex, DefPathHash}; + +@@ -10,8 +7,8 @@ + use crate::rmeta::decoder::BlobDecodeContext; + + pub(crate) enum DefPathHashMapRef<'tcx> { +- OwnedFromMetadata(odht::HashTable, SortedMap), +- BorrowedFromTcx(&'tcx DefPathToIndexMap), ++ OwnedFromMetadata(odht::HashTable), ++ BorrowedFromTcx(&'tcx DefPathHashMap), + } + + impl DefPathHashMapRef<'_> { +@@ -20,11 +17,8 @@ + &self, + def_path_hash: &DefPathHash, + ) -> Option { +- match self { +- DefPathHashMapRef::OwnedFromMetadata(det_map, non_det_map) => { +- let hash = &def_path_hash.local_hash(); +- det_map.get(hash).or_else(|| non_det_map.get(hash).copied()) +- } ++ match *self { ++ DefPathHashMapRef::OwnedFromMetadata(ref map) => map.get(&def_path_hash.local_hash()), + DefPathHashMapRef::BorrowedFromTcx(_) => { + panic!("DefPathHashMap::BorrowedFromTcx variant only exists for serialization") + } +@@ -35,18 +29,12 @@ + impl<'a, 'tcx> Encodable> for DefPathHashMapRef<'tcx> { + fn encode(&self, e: &mut EncodeContext<'a, 'tcx>) { + match *self { +- DefPathHashMapRef::BorrowedFromTcx(map) => { +- let bytes = map.before_parallel_alloc.raw_bytes(); ++ DefPathHashMapRef::BorrowedFromTcx(def_path_hash_map) => { ++ let bytes = def_path_hash_map.raw_bytes(); + e.emit_usize(bytes.len()); + e.emit_raw_bytes(bytes); +- +- map.after_parallel_alloc +- .as_ref() +- .expect("must be set before metadata encoding") +- .range(..) +- .encode(e); + } +- DefPathHashMapRef::OwnedFromMetadata(..) => { ++ DefPathHashMapRef::OwnedFromMetadata(_) => { + panic!("DefPathHashMap::OwnedFromMetadata variant only exists for deserialization") + } + } +@@ -67,10 +55,6 @@ + let inner = odht::HashTable::from_raw_bytes(o).unwrap_or_else(|e| { + panic!("decode error: {e}"); + }); +- +- let elements = Vec::<(Hash64, DefIndex)>::decode(d); +- let non_det_map = SortedMap::from_presorted_elements(elements); +- +- DefPathHashMapRef::OwnedFromMetadata(inner, non_det_map) ++ DefPathHashMapRef::OwnedFromMetadata(inner) + } + } +--- a/compiler/rustc_middle/src/ty/context.rs ++++ b/compiler/rustc_middle/src/ty/context.rs +@@ -1400,7 +1400,9 @@ + self.untracked.definitions.freeze() + } + +- pub fn def_path_hash_to_def_index_map(self) -> &'tcx rustc_hir::definitions::DefPathToIndexMap { ++ pub fn def_path_hash_to_def_index_map( ++ self, ++ ) -> &'tcx rustc_hir::def_path_hash_map::DefPathHashMap { + // Create a dependency to the crate to be sure we re-execute this when the amount of + // definitions change. + self.ensure_ok().hir_crate_items(()); diff --git a/rustc/regressions/82047-remove-before-rename.patch b/rustc/regressions/82047-remove-before-rename.patch new file mode 100644 index 0000000..01fcba4 --- /dev/null +++ b/rustc/regressions/82047-remove-before-rename.patch @@ -0,0 +1,10 @@ +--- a/compiler/rustc_metadata/src/fs.rs ++++ b/compiler/rustc_metadata/src/fs.rs +@@ -131,7 +131,6 @@ + /// The cost of an extra syscall is much lower than getting descheduled for the sync IO. + #[cfg(target_os = "linux")] + pub fn non_durable_rename(src: &Path, dst: &Path) -> std::io::Result<()> { +- let _ = std::fs::remove_file(dst); + std::fs::rename(src, dst) + } + diff --git a/tests/rmeta/chain.touch.txt b/tests/rmeta/chain.touch.txt new file mode 100644 index 0000000..84019d0 --- /dev/null +++ b/tests/rmeta/chain.touch.txt @@ -0,0 +1,304 @@ +== app (bin) emit dep-info,link == +files + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler2-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - + open target/debug/build/base/#/out/libbase-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - + open target/debug/build/base/#/out/libbase-#.rmeta in - + open target/debug/build/mid/#/out/libmid-#.rmeta in - + create target/debug/build/app/#/out/rmeta* in fs::encode_and_write_metadata + create target/debug/build/app/#/out/rmeta*/full.rmeta in fs::encode_and_write_metadata + open target/debug/build/app/#/out/rmeta*/full.rmeta in fs::encode_and_write_metadata + remove_dir_all target/debug/build/app/#/out/rmeta* in fs::encode_and_write_metadata + create target/debug/build/app/#/out/rustc* in - + remove_dir_all target/debug/build/app/#/out/rustc* in - +read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote + 6 2 items 2 tracked attrs_for_def + 19 19 items 19 tracked canonical_symbols + 128 64 items 64 tracked codegen_fn_attrs + 45 45 items 45 tracked cross_crate_inlinable + 19 19 items 19 tracked debugger_visualizers + 132 132 items 132 tracked def_kind + 1 1 items 1 tracked defaultness + 19 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 6 2 items 2 tracked explicit_clauses_of + 7 3 items 3 tracked explicit_implied_clauses_of + 1 1 items 1 tracked exportable_items + 21 19 items 19 tracked exported_generic_symbols + 19 19 items 19 tracked exported_non_generic_symbols + 46 22 items 22 tracked generics_of + 20 10 items 10 tracked impl_trait_header + 1 1 items 1 tracked implementations_of_trait + 2 2 items 2 tracked inferred_outlives_of + 1 1 items 1 tracked intrinsic_raw + 19 19 items 19 tracked missing_lang_items + 3402 43 items 43 tracked module_children + 23 19 items 19 tracked native_libraries + 2 1 items 1 tracked trait_def + 36 18 items 18 tracked type_of + 136 68 items 68 tracked visibility + 11 5 items 5 tracked base attrs_for_def + 1 1 items 1 tracked base canonical_symbols + 12 6 items 6 tracked base codegen_fn_attrs + 5 5 items 5 tracked base cross_crate_inlinable + 1 1 items 1 tracked base debugger_visualizers + 11 11 items 11 tracked base def_kind + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items + 1 1 items 1 tracked base exported_generic_symbols + 1 1 items 1 tracked base exported_non_generic_symbols + 2 1 items 1 tracked base fn_sig + 2 1 items 1 tracked base generics_of + 1 1 items 1 tracked base missing_lang_items + 107 3 items 3 tracked base module_children + 1 1 items 1 tracked base native_libraries + 2 1 items 1 tracked base type_of + 6 3 items 3 tracked base visibility + 2 1 items 1 tracked mid attrs_for_def + 1 1 items 1 tracked mid canonical_symbols + 2 1 items 1 tracked mid codegen_fn_attrs + 1 1 items 1 tracked mid cross_crate_inlinable + 1 1 items 1 tracked mid debugger_visualizers + 1 1 items 1 tracked mid def_kind + 1 1 items 1 tracked mid defined_lang_items + 1 1 items 1 tracked mid diagnostic_items + 1 1 items 1 tracked mid exported_generic_symbols + 1 1 items 1 tracked mid exported_non_generic_symbols + 4 2 items 2 tracked mid generics_of + 1 1 items 1 tracked mid missing_lang_items + 31 1 items 1 tracked mid module_children + 1 1 items 1 tracked mid native_libraries + 2 1 items 1 tracked mid visibility +read outside a query + 87 CrateMetadata::def_kind in - + 8609 CrateMetadata::def_path_hash in - + 27 CrateMetadata::expn_hash_to_expn_id in - + 144 CrateMetadata::get_expn_that_defined in - + 6 CrateMetadata::get_item_attrs in - + 9 CrateMetadata::get_macro in - + 1886 CrateMetadata::get_span in - + 6 CrateMetadata::opt_item_ident in - + 21 CrateRoot>::decode_denied_partial_mitigations in - + 21 CrateRoot>::decode_target_modifiers in - + 21 MetadataBlob::check_compatibility in - + 36 MetadataBlob::get_header in - + 6 MetadataBlob::get_root in - + 44 decode_expn_id::{closure#0} in - + 8 decode_syntax_context::{closure#0} in - + 294 def_key::{closure#0} in - + 9 expn_hash_to_expn_id::{closure#0} in - + 47 get_ambig_module_children::{closure#0} in - + 1474 imported_source_file::{closure#2} in - + 84 CrateMetadata::new in CStore::register_crate + 21 CrateRoot>::decode_crate_deps in CStore::register_crate + 36 MetadataBlob::check_compatibility in CStore::register_crate + 72 MetadataBlob::get_header in CStore::register_crate + 39 MetadataBlob::get_root in CStore::register_crate + 42 MetadataBlob::get_root_unhashed in CStore::register_crate + 43 new::{closure#1} in CStore::register_crate + +== base (lib) emit dep-info,metadata,link == +files + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler2-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - + create target/debug/build/base/#/out/rmeta* in fs::encode_and_write_metadata + open target/debug/incremental/base-#/s-*/metadata.rmeta in encoder::encode_metadata + encode-to target/debug/build/base/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata + remove_file target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + rename target/debug/build/base/#/out/rmeta*/full.rmeta -> target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + open target/debug/build/base/#/out/libbase-#.rmeta in fs::encode_and_write_metadata + create target/debug/build/base/#/out/rustc* in - + write target/debug/build/base/#/out/rustc*/lib.rmeta-link in - + write target/debug/build/base/#/out/rustc*/lib.rmeta in - + create target/debug/build/base/#/out/.tmp*.temp-archive in - + remove_dir_all target/debug/build/base/#/out/.tmp*.temp-archive in - + remove_dir_all target/debug/build/base/#/out/rustc* in - + remove_dir_all target/debug/build/base/#/out/rmeta* in - +read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote + 7 1 items 1 tracked associated_item + 6 2 items 2 tracked attrs_for_def + 19 19 items 19 tracked canonical_symbols + 36 18 items 18 tracked codegen_fn_attrs + 2 1 items 1 tracked const_conditions + 1 1 items 1 tracked constness + 18 18 items 18 tracked cross_crate_inlinable + 63 63 items 63 tracked def_kind + 2 1 items 1 tracked def_span + 1 1 items 1 tracked defaultness + 19 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 6 3 items 3 tracked explicit_clauses_of + 5 3 items 3 tracked explicit_implied_clauses_of + 28 14 items 14 tracked generics_of + 8 4 items 4 tracked impl_trait_header + 15 15 items 15 tracked implementations_of_trait + 3 3 items 3 tracked inferred_outlives_of + 1 1 items 1 tracked intrinsic_raw + 19 19 items 19 tracked missing_lang_items + 4145 47 items 47 tracked module_children + 23 19 items 19 tracked native_libraries + 4 2 items 2 tracked trait_def + 18 9 items 9 tracked type_of + 150 75 items 75 tracked visibility +read outside a query + 148 CrateMetadata::def_kind in - + 8717 CrateMetadata::def_path_hash in - + 144 CrateMetadata::get_expn_that_defined in - + 14 CrateMetadata::get_item_attrs in - + 21 CrateMetadata::get_macro in - + 2034 CrateMetadata::get_span in - + 14 CrateMetadata::opt_item_ident in - + 19 CrateRoot>::decode_denied_partial_mitigations in - + 19 CrateRoot>::decode_target_modifiers in - + 6 MetadataBlob::check_compatibility in - + 8 MetadataBlob::get_header in - + 2 MetadataBlob::get_root in - + 40 decode_expn_id::{closure#0} in - + 116 def_key::{closure#0} in - + 47 get_ambig_module_children::{closure#0} in - + 54 imported_source_file::{closure#2} in - + 76 CrateMetadata::new in CStore::register_crate + 19 CrateRoot>::decode_crate_deps in CStore::register_crate + 18 MetadataBlob::check_compatibility in CStore::register_crate + 36 MetadataBlob::get_header in CStore::register_crate + 37 MetadataBlob::get_root in CStore::register_crate + 38 MetadataBlob::get_root_unhashed in CStore::register_crate + 43 new::{closure#1} in CStore::register_crate + 258 CrateMetadata::def_path_hash in encoder::encode_metadata + 15 CrateMetadata::expn_hash_to_expn_id in encoder::encode_metadata + 4 decode_expn_id::{closure#0} in encoder::encode_metadata + 2 decode_syntax_context::{closure#0} in encoder::encode_metadata + 62 def_key::{closure#0} in encoder::encode_metadata + 5 expn_hash_to_expn_id::{closure#0} in encoder::encode_metadata + 934 imported_source_file::{closure#2} in encoder::encode_metadata + +== mid (lib) emit dep-info,metadata,link == +files + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler2-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-#.rmeta in CStore::register_crate + open target/debug/build/base/#/out/libbase-#.rmeta in - + open target/debug/build/base/#/out/libbase-#.rmeta in - + create target/debug/build/mid/#/out/rmeta* in fs::encode_and_write_metadata + open target/debug/incremental/mid-#/s-*/metadata.rmeta in encoder::encode_metadata + encode-to target/debug/build/mid/#/out/rmeta*/stub.rmeta in encoder::encode_metadata + finished in encoder::encode_metadata + remove_file target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + rename target/debug/build/mid/#/out/rmeta*/full.rmeta -> target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + open target/debug/build/mid/#/out/libmid-#.rmeta in fs::encode_and_write_metadata + create target/debug/build/mid/#/out/rustc* in - + write target/debug/build/mid/#/out/rustc*/lib.rmeta-link in - + write target/debug/build/mid/#/out/rustc*/lib.rmeta in - + create target/debug/build/mid/#/out/.tmp*.temp-archive in - + remove_dir_all target/debug/build/mid/#/out/.tmp*.temp-archive in - + remove_dir_all target/debug/build/mid/#/out/rustc* in - + remove_dir_all target/debug/build/mid/#/out/rmeta* in - +read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote + 19 19 items 19 tracked canonical_symbols + 2 1 items 1 tracked codegen_fn_attrs + 1 1 items 1 tracked cross_crate_inlinable + 4 4 items 4 tracked def_kind + 19 19 items 19 tracked defined_lang_items + 7 7 items 7 tracked diagnostic_items + 2 1 items 1 tracked impl_trait_header + 19 19 items 19 tracked missing_lang_items + 2076 37 items 37 tracked module_children + 23 19 items 19 tracked native_libraries + 2 1 items 1 tracked type_of + 118 59 items 59 tracked visibility + 2 1 items 1 tracked base attrs_for_def + 1 1 items 1 tracked base canonical_symbols + 2 1 items 1 tracked base codegen_fn_attrs + 1 1 items 1 tracked base cross_crate_inlinable + 1 1 items 1 tracked base def_kind + 1 1 items 1 tracked base defined_lang_items + 1 1 items 1 tracked base diagnostic_items + 2 1 items 1 tracked base generics_of + 1 1 items 1 tracked base missing_lang_items + 97 2 items 2 tracked base module_children + 1 1 items 1 tracked base native_libraries + 6 3 items 3 tracked base visibility +read outside a query + 61 CrateMetadata::def_kind in - + 3325 CrateMetadata::def_path_hash in - + 122 CrateMetadata::get_expn_that_defined in - + 1136 CrateMetadata::get_span in - + 20 CrateRoot>::decode_denied_partial_mitigations in - + 20 CrateRoot>::decode_target_modifiers in - + 5 MetadataBlob::check_compatibility in - + 8 MetadataBlob::get_header in - + 3 MetadataBlob::get_root in - + 28 decode_expn_id::{closure#0} in - + 116 def_key::{closure#0} in - + 39 get_ambig_module_children::{closure#0} in - + 844 imported_source_file::{closure#2} in - + 80 CrateMetadata::new in CStore::register_crate + 20 CrateRoot>::decode_crate_deps in CStore::register_crate + 18 MetadataBlob::check_compatibility in CStore::register_crate + 36 MetadataBlob::get_header in CStore::register_crate + 38 MetadataBlob::get_root in CStore::register_crate + 40 MetadataBlob::get_root_unhashed in CStore::register_crate + 43 new::{closure#1} in CStore::register_crate + 24 CrateMetadata::def_path_hash in encoder::encode_metadata + 6 def_key::{closure#0} in encoder::encode_metadata + diff --git a/tests/rmeta/chain.txt b/tests/rmeta/chain.txt index 819cce4..a541366 100644 --- a/tests/rmeta/chain.txt +++ b/tests/rmeta/chain.txt @@ -20,7 +20,11 @@ files open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-#.rmeta in CStore::register_crate open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-#.rmeta in CStore::register_crate open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - open target/debug/build/base/#/out/libbase-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - open target/debug/build/base/#/out/libbase-#.rmeta in - open target/debug/build/mid/#/out/libmid-#.rmeta in - create target/debug/build/app/#/out/rmeta* in fs::encode_and_write_metadata @@ -30,113 +34,120 @@ files create target/debug/build/app/#/out/rustc* in - remove_dir_all target/debug/build/app/#/out/rustc* in - read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote - 560 23 items 23 tracked adt_def - 11 9 items 9 tracked adt_destructor - 152 76 items 76 tracked anon_const_kind - 2338 336 items 336 tracked associated_item - 110 55 items 55 tracked associated_item_def_ids - 6 6 items 6 tracked asyncness - 144 51 items 51 tracked attrs_for_def + 811 32 items 32 tracked adt_def + 18 16 items 16 tracked adt_destructor + 22 11 items 11 tracked anon_const_kind + 3249 469 items 469 tracked associated_item + 150 75 items 75 tracked associated_item_def_ids + 7 7 items 7 tracked asyncness + 120 55 items 55 tracked attrs_for_def 19 19 items 19 tracked canonical_symbols - 10 5 items 5 tracked closure_saved_names_of_captured_variables - 388 194 items 194 tracked codegen_fn_attrs - 18 9 items 9 tracked const_conditions - 70 70 items 70 tracked constness - 5 5 items 5 tracked coroutine_kind + 16 8 items 8 tracked closure_saved_names_of_captured_variables + 342 171 items 171 tracked codegen_fn_attrs + 28 14 items 14 tracked const_conditions + 67 67 items 67 tracked constness + 9 9 items 9 tracked coroutine_kind 3 3 items 3 tracked crate_name - 148 148 items 148 tracked cross_crate_inlinable + 128 128 items 128 tracked cross_crate_inlinable 19 19 items 19 tracked debugger_visualizers - 10 5 items 5 tracked def_ident_span - 485 485 items 485 tracked def_kind - 598 283 items 283 tracked def_span - 79 79 items 79 tracked defaultness + 32 16 items 16 tracked def_ident_span + 443 443 items 443 tracked def_kind + 450 208 items 208 tracked def_span + 98 98 items 98 tracked defaultness 35 19 items 19 tracked defined_lang_items 7 7 items 7 tracked diagnostic_items - 394 180 items 180 tracked explicit_clauses_of - 58 31 items 31 tracked explicit_implied_clauses_of - 3 3 items 3 tracked explicit_implied_const_bounds - 2 1 items 1 tracked explicit_item_bounds - 2 1 items 1 tracked explicit_item_self_bounds - 13 7 items 7 tracked explicit_super_clauses_of - 10 5 items 5 tracked expn_that_defined + 372 160 items 160 tracked explicit_clauses_of + 67 37 items 37 tracked explicit_implied_clauses_of + 6 5 items 5 tracked explicit_implied_const_bounds + 4 2 items 2 tracked explicit_item_bounds + 4 2 items 2 tracked explicit_item_self_bounds + 20 11 items 11 tracked explicit_super_clauses_of + 28 14 items 14 tracked expn_that_defined 3 3 items 3 tracked exportable_items 21 19 items 19 tracked exported_generic_symbols 19 19 items 19 tracked exported_non_generic_symbols 19 19 items 19 tracked externally_implementable_items - 358 178 items 178 tracked fn_sig - 722 360 items 360 tracked generics_of - 21 21 items 21 tracked impl_parent - 98 49 items 49 tracked impl_trait_header - 97 97 items 97 tracked implementations_of_trait - 182 180 items 180 tracked inferred_outlives_of - 6 3 items 3 tracked inherent_impls - 86 80 items 80 tracked intrinsic_raw - 1375 1375 items 1375 tracked is_doc_hidden - 43 43 items 43 tracked is_mir_available - 8 8 items 8 tracked lookup_deprecation_entry - 20 10 items 10 tracked lookup_stability - 198 90 items 90 tracked mir_for_ctfe + 312 155 items 155 tracked fn_sig + 652 325 items 325 tracked generics_of + 22 22 items 22 tracked impl_parent + 130 65 items 65 tracked impl_trait_header + 112 112 items 112 tracked implementations_of_trait + 162 160 items 160 tracked inferred_outlives_of + 12 6 items 6 tracked inherent_impls + 78 74 items 74 tracked intrinsic_raw + 1377 1377 items 1377 tracked is_doc_hidden + 46 46 items 46 tracked is_mir_available + 2 1 items 1 tracked lookup_const_stability + 32 32 items 32 tracked lookup_deprecation_entry + 76 38 items 38 tracked lookup_stability + 38 19 items 19 tracked mir_for_ctfe 19 19 items 19 tracked missing_lang_items - 22321 414 items 414 tracked module_children + 23445 415 items 415 tracked module_children 23 19 items 19 tracked native_libraries - 342 43 items 43 tracked optimized_mir + 4 2 items 2 tracked object_lifetime_default + 262 46 items 46 tracked optimized_mir + 2 1 items 1 tracked promoted_mir 1468 3 items 3 tracked reachable_non_generics 3 3 items 3 tracked stable_order_of_exportable_impls - 66 33 items 33 tracked trait_def - 98 87 items 87 tracked trivial_const - 598 299 items 299 tracked type_of - 18 9 items 9 tracked variances_of - 262 131 items 131 tracked visibility - 3 0 items 0 tracked ? crate_incoherent_impls + 84 42 items 42 tracked trait_def + 35 24 items 24 tracked trivial_const + 610 305 items 305 tracked type_of + 44 22 items 22 tracked variances_of + 356 178 items 178 tracked visibility + 5 0 items 0 tracked ? crate_incoherent_impls 16 1 items 1 tracked base adt_def 1 1 items 1 tracked base adt_destructor - 17 3 items 3 tracked base associated_item - 4 2 items 2 tracked base associated_item_def_ids - 11 5 items 5 tracked base attrs_for_def + 39 7 items 7 tracked base associated_item + 8 4 items 4 tracked base associated_item_def_ids + 17 8 items 8 tracked base attrs_for_def 1 1 items 1 tracked base canonical_symbols - 2 1 items 1 tracked 1 written base closure_saved_names_of_captured_variables - 12 6 items 6 tracked 6 written base codegen_fn_attrs - 5 5 items 5 tracked 5 written base constness - 1 1 items 1 tracked base coroutine_kind + 6 3 items 3 tracked 3 written base closure_saved_names_of_captured_variables + 24 12 items 12 tracked 12 written base codegen_fn_attrs + 8 8 items 8 tracked 8 written base constness + 1 1 items 1 tracked 1 written base coroutine_by_move_body_def_id + 1 1 items 1 tracked 1 written base coroutine_for_closure + 3 3 items 3 tracked 1 written base coroutine_kind 1 1 items 1 tracked base crate_name - 5 5 items 5 tracked 3 written base cross_crate_inlinable + 9 9 items 9 tracked 5 written base cross_crate_inlinable 1 1 items 1 tracked base debugger_visualizers - 4 2 items 2 tracked 2 written base def_ident_span - 13 13 items 13 tracked 13 written base def_kind - 14 7 items 7 tracked 7 written base def_span - 5 5 items 5 tracked 5 written base defaultness + 6 3 items 3 tracked 3 written base def_ident_span + 25 25 items 25 tracked 25 written base def_kind + 26 13 items 13 tracked 13 written base def_span + 9 9 items 9 tracked 9 written base defaultness 1 1 items 1 tracked base defined_lang_items 1 1 items 1 tracked base diagnostic_items - 18 9 items 9 tracked 9 written base explicit_clauses_of - 2 1 items 1 tracked 1 written base explicit_implied_clauses_of - 2 1 items 1 tracked 1 written base expn_that_defined + 36 18 items 18 tracked 18 written base explicit_clauses_of + 4 2 items 2 tracked 2 written base explicit_implied_clauses_of + 4 2 items 2 tracked 2 written base explicit_item_bounds + 22 2 items 2 tracked 2 written base explicit_item_self_bounds + 4 2 items 2 tracked 2 written base expn_that_defined 1 1 items 1 tracked base exportable_items 1 1 items 1 tracked base exported_generic_symbols 1 1 items 1 tracked base exported_non_generic_symbols 1 1 items 1 tracked base externally_implementable_items - 12 6 items 6 tracked 6 written base fn_sig - 22 11 items 11 tracked 11 written base generics_of - 1 1 items 1 tracked base impl_parent - 4 2 items 2 tracked 2 written base impl_trait_header - 3 3 items 3 tracked base implementations_of_trait - 9 9 items 9 tracked 9 written base inferred_outlives_of + 20 10 items 10 tracked 10 written base fn_sig + 44 22 items 22 tracked 22 written base generics_of + 2 2 items 2 tracked base impl_parent + 6 3 items 3 tracked 3 written base impl_trait_header + 4 4 items 4 tracked base implementations_of_trait + 18 18 items 18 tracked 18 written base inferred_outlives_of 2 1 items 1 tracked base inherent_impls - 4 4 items 4 tracked base intrinsic_raw - 2 2 items 2 tracked base is_doc_hidden - 3 3 items 3 tracked base is_mir_available - 7 6 items 6 tracked 1 written base lookup_deprecation_entry - 5 5 items 5 tracked base lookup_stability + 7 7 items 7 tracked base intrinsic_raw + 3 3 items 3 tracked base is_doc_hidden + 4 4 items 4 tracked base is_mir_available + 11 10 items 10 tracked 1 written base lookup_deprecation_entry + 8 8 items 8 tracked base lookup_stability 1 1 items 1 tracked base missing_lang_items - 76 2 items 2 tracked base module_children + 107 3 items 3 tracked base module_children 1 1 items 1 tracked base native_libraries - 28 3 items 3 tracked 3 written base optimized_mir - 3 1 items 1 tracked base reachable_non_generics + 38 5 items 5 tracked 5 written base optimized_mir + 6 1 items 1 tracked base reachable_non_generics 1 1 items 1 tracked base stable_order_of_exportable_impls - 2 1 items 1 tracked 1 written base trait_def + 4 2 items 2 tracked 2 written base trait_def 2 1 items 1 tracked 1 written base trivial_const - 20 10 items 10 tracked 10 written base type_of - 6 3 items 3 tracked 3 written base variances_of - 18 9 items 9 tracked 9 written base visibility + 42 21 items 21 tracked 21 written base type_of + 12 6 items 6 tracked 6 written base variances_of + 28 14 items 14 tracked 14 written base visibility 24 1 items 1 tracked mid adt_def 1 1 items 1 tracked mid adt_destructor 2 1 items 1 tracked 1 written mid anon_const_kind @@ -186,22 +197,22 @@ read through queries: reads, items, items whose query recorded a dependency on t 2 1 items 1 tracked 1 written mid variances_of 10 5 items 5 tracked 5 written mid visibility read outside a query - 75 CrateMetadata::def_kind in - - 85880 CrateMetadata::def_path_hash in - - 132 CrateMetadata::get_expn_that_defined in - - 4 CrateMetadata::get_item_attrs in - - 6 CrateMetadata::get_macro in - - 1300 CrateMetadata::get_span in - - 4 CrateMetadata::opt_item_ident in - + 87 CrateMetadata::def_kind in - + 88547 CrateMetadata::def_path_hash in - + 144 CrateMetadata::get_expn_that_defined in - + 6 CrateMetadata::get_item_attrs in - + 9 CrateMetadata::get_macro in - + 1886 CrateMetadata::get_span in - + 6 CrateMetadata::opt_item_ident in - 21 CrateRoot>::decode_denied_partial_mitigations in - 21 CrateRoot>::decode_target_modifiers in - - 11 MetadataBlob::check_compatibility in - - 20 MetadataBlob::get_header in - - 4 MetadataBlob::get_root in - - 28 decode_expn_id::{closure#0} in - - 602 def_key::{closure#0} in - - 41 get_ambig_module_children::{closure#0} in - - 52 imported_source_file::{closure#2} in - + 21 MetadataBlob::check_compatibility in - + 36 MetadataBlob::get_header in - + 6 MetadataBlob::get_root in - + 32 decode_expn_id::{closure#0} in - + 520 def_key::{closure#0} in - + 47 get_ambig_module_children::{closure#0} in - + 50 imported_source_file::{closure#2} in - 84 CrateMetadata::new in CStore::register_crate 21 CrateRoot>::decode_crate_deps in CStore::register_crate 36 MetadataBlob::check_compatibility in CStore::register_crate @@ -232,6 +243,8 @@ files open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-#.rmeta in CStore::register_crate open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-#.rmeta in CStore::register_crate open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-#.rmeta in CStore::register_crate + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-#.rmeta in - + open /lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-#.rmeta in - create target/debug/build/base/#/out/rmeta* in fs::encode_and_write_metadata encode-to target/debug/build/base/#/out/rmeta*/full.rmeta in encoder::encode_metadata finished in encoder::encode_metadata @@ -249,133 +262,149 @@ files remove_dir_all target/debug/build/base/#/out/rmeta* in - encoded 1 1 items adapted.set_some(on_disk_index, self.lazy(adapted_source_file)) - 10 10 items expn_data_table .set_some(index.as_raw(), this.lazy(expn_data.expect("local expn"))) - 10 10 items expn_hash_table.set_some(index.as_raw(), this.lazy(hash)) - 8 8 items record_array!(self.tables.associated_item_or_field_def_ids[def_id] <- associated_item_def_ids.iter().map(|&def_id| { assert!(def_id.is_local()); def_id.index }) + 15 15 items expn_data_table .set_some(index.as_raw(), this.lazy(expn_data.expect("local expn"))) + 15 15 items expn_hash_table.set_some(index.as_raw(), this.lazy(hash)) + 1 1 items record_array!( self.tables.assumed_wf_types_for_rpitit[def_id] <- self.tcx.assumed_wf_types_for_rpitit(def_id) ) + 10 10 items record_array!(self.tables.associated_item_or_field_def_ids[def_id] <- associated_item_def_ids.iter().map(|&def_id| { assert!(def_id.is_local()); def_id.index }) 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[variant.def_id] <- variant.fields.iter().map(|f| { assert!(f.did.is_local()); f.did.index })) - 23 23 items record_array!(self.tables.attributes[def_id.to_def_id()] <- attr_iter) - 9 9 items record_array!(self.tables.fn_arg_idents[def_id] <- tcx.fn_arg_idents(def_id)) + 33 33 items record_array!(self.tables.attributes[def_id.to_def_id()] <- attr_iter) + 13 13 items record_array!(self.tables.fn_arg_idents[def_id] <- tcx.fn_arg_idents(def_id)) 2 1 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().filter(|child| child.reexport_chain.is_empty()) .map(|child| child.res - 1 1 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().map(|child| child.res.def_id().index)) - 11 11 items record_array!(self.tables.variances_of[def_id] <- v) + 2 2 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().map(|child| child.res.def_id().index)) + 19 19 items record_array!(self.tables.variances_of[def_id] <- v) 2 1 items record_defaulted_array!(self.tables.ambig_module_children[def_id] <- ambig_module_children) - 1 1 items record_defaulted_array!(self.tables.explicit_implied_clauses_of[def_id] <- self.tcx.explicit_implied_clauses_of(def_id).skip_binder()) - 1 1 items record_defaulted_array!(self.tables.explicit_super_clauses_of[def_id] <- self.tcx.explicit_super_clauses_of(def_id).skip_binder()) - 23 23 items record_defaulted_array!(self.tables.inferred_outlives_of[def_id] <- inferred_outlives) + 2 2 items record_defaulted_array!(self.tables.explicit_implied_clauses_of[def_id] <- self.tcx.explicit_implied_clauses_of(def_id).skip_binder()) + 4 4 items record_defaulted_array!(self.tables.explicit_item_bounds[def_id] <- bounds) + 4 4 items record_defaulted_array!(self.tables.explicit_item_self_bounds[def_id] <- bounds) + 2 2 items record_defaulted_array!(self.tables.explicit_super_clauses_of[def_id] <- self.tcx.explicit_super_clauses_of(def_id).skip_binder()) + 37 37 items record_defaulted_array!(self.tables.inferred_outlives_of[def_id] <- inferred_outlives) 2 1 items record_defaulted_array!(self.tables.module_children_reexports[def_id] <- module_children.iter().filter(|child| !child.reexport_chain.is_empty())) - 36 36 items record_some!(self.tables.def_kind[def_id] <- def_kind) + 1 1 items record_some!( self.tables.coroutine_by_move_body_def_id[coroutine_for_closure] <- id.into() ) + 1 1 items record_some!(self.tables.coroutine_for_closure[def_id] <- coroutine_for_closure.into()) + 54 54 items record_some!(self.tables.def_kind[def_id] <- def_kind) 1 1 items record_some_lazy!( self.tables.mut_restriction[field.did] <- field.mut_restriction ) - 6 6 items record_some_lazy!(self.tables.assoc_container[def_id] <- item.container) - 8 8 items record_some_lazy!(self.tables.associated_types_for_impl_traits_in_trait_or_impl[def_id] <- table) - 7 7 items record_some_lazy!(self.tables.closure_saved_names_of_captured_variables[def_id.to_def_id()] <- tcx.closure_saved_names_of_captured_variables(def_id)) - 11 11 items record_some_lazy!(self.tables.codegen_fn_attrs[def_id] <- self.tcx.codegen_fn_attrs(def_id)) + 4 4 items record_some_lazy!(self.tables.args_known_to_outlive_alias_params[def_id] <- tcx.args_known_to_outlive_alias_params(def_id)) + 10 10 items record_some_lazy!(self.tables.assoc_container[def_id] <- item.container) + 10 10 items record_some_lazy!(self.tables.associated_types_for_impl_traits_in_trait_or_impl[def_id] <- table) + 10 10 items record_some_lazy!(self.tables.closure_saved_names_of_captured_variables[def_id.to_def_id()] <- tcx.closure_saved_names_of_captured_variables(def_id)) + 18 18 items record_some_lazy!(self.tables.codegen_fn_attrs[def_id] <- self.tcx.codegen_fn_attrs(def_id)) + 1 1 items record_some_lazy!(self.tables.collect_return_position_impl_trait_in_trait_tys[def_id] <- table) 1 1 items record_some_lazy!(self.tables.const_conditions[def_id] <- self.tcx.const_conditions(def_id)) 1 1 items record_some_lazy!(self.tables.const_of_item[def_id] <- self.tcx.const_of_item(def_id)) - 26 26 items record_some_lazy!(self.tables.def_ident_span[def_id] <- ident_span) - 36 36 items record_some_lazy!(self.tables.def_keys[def_id] <- def_key) - 36 36 items record_some_lazy!(self.tables.def_span[def_id] <- def_span) - 23 23 items record_some_lazy!(self.tables.explicit_clauses_of[def_id] <- self.tcx.explicit_clauses_of(def_id)) - 10 10 items record_some_lazy!(self.tables.expn_that_defined[def_id] <- self.tcx.expn_that_defined(def_id)) - 10 10 items record_some_lazy!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id)) + 37 37 items record_some_lazy!(self.tables.def_ident_span[def_id] <- ident_span) + 54 54 items record_some_lazy!(self.tables.def_keys[def_id] <- def_key) + 54 54 items record_some_lazy!(self.tables.def_span[def_id] <- def_span) + 37 37 items record_some_lazy!(self.tables.explicit_clauses_of[def_id] <- self.tcx.explicit_clauses_of(def_id)) + 12 12 items record_some_lazy!(self.tables.expn_that_defined[def_id] <- self.tcx.expn_that_defined(def_id)) + 14 14 items record_some_lazy!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id)) 1 1 items record_some_lazy!(self.tables.fn_sig[variant.def_id] <- fn_sig) - 23 23 items record_some_lazy!(self.tables.generics_of[def_id] <- g) - 7 7 items record_some_lazy!(self.tables.impl_trait_header[def_id] <- header) + 37 37 items record_some_lazy!(self.tables.generics_of[def_id] <- g) + 8 8 items record_some_lazy!(self.tables.impl_trait_header[def_id] <- header) 1 1 items record_some_lazy!(self.tables.lookup_deprecation_entry[def_id] <- depr) 1 1 items record_some_lazy!(self.tables.mir_const_qualif[def_id.to_def_id()] <- qualifs) + 4 2 items record_some_lazy!(self.tables.mir_coroutine_witnesses[def_id.to_def_id()] <- witnesses) 1 1 items record_some_lazy!(self.tables.mir_for_ctfe[def_id.to_def_id()] <- tcx.mir_for_ctfe(def_id)) - 2 2 items record_some_lazy!(self.tables.object_lifetime_default[def_id] <- default) - 7 7 items record_some_lazy!(self.tables.optimized_mir[def_id.to_def_id()] <- tcx.optimized_mir(def_id)) + 3 3 items record_some_lazy!(self.tables.object_lifetime_default[def_id] <- default) + 3 3 items record_some_lazy!(self.tables.opaque_ty_origin[def_id] <- self.tcx.opaque_ty_origin(def_id)) + 2 2 items record_some_lazy!(self.tables.opt_rpitit_info[def_id] <- rpitit_info) + 10 10 items record_some_lazy!(self.tables.optimized_mir[def_id.to_def_id()] <- tcx.optimized_mir(def_id)) 1 1 items record_some_lazy!(self.tables.params_in_repr[def_id] <- params_in_repr) - 8 8 items record_some_lazy!(self.tables.promoted_mir[def_id.to_def_id()] <- tcx.promoted_mir(def_id)) + 11 11 items record_some_lazy!(self.tables.promoted_mir[def_id.to_def_id()] <- tcx.promoted_mir(def_id)) 1 1 items record_some_lazy!(self.tables.rendered_const[def_id.to_def_id()] <- const_data) 1 1 items record_some_lazy!(self.tables.repr_options[def_id] <- adt_def.repr()) - 1 1 items record_some_lazy!(self.tables.trait_def[def_id] <- self.tcx.trait_def(def_id)) + 2 2 items record_some_lazy!(self.tables.trait_def[def_id] <- self.tcx.trait_def(def_id)) 1 1 items record_some_lazy!(self.tables.trivial_const[def_id.to_def_id()] <- (val, ty)) - 21 21 items record_some_lazy!(self.tables.type_of[def_id] <- self.tcx.type_of(def_id)) + 32 32 items record_some_lazy!(self.tables.type_of[def_id] <- self.tcx.type_of(def_id)) 1 1 items record_some_lazy!(self.tables.variant_data[variant.def_id] <- data) - 15 15 items record_some_lazy!(self.tables.visibility[def_id] <- vis) - 9 9 items record_value!(self.tables.asyncness[def_id] <- asyncness) - 23 23 items record_value!(self.tables.attr_flags[def_id.to_def_id()] <- attr_flags) - 11 11 items record_value!(self.tables.constness[def_id] <- constness) - 7 7 items record_value!(self.tables.cross_crate_inlinable[def_id.to_def_id()] <- self.tcx.cross_crate_inlinable(def_id)) - 36 36 items record_value!(self.tables.def_path_hashes[def_id] <- def_path_hash.local_hash().as_u64()) - 6 6 items record_value!(self.tables.defaultness[def_id] <- item.defaultness(tcx)) - 7 7 items record_value!(self.tables.defaultness[def_id] <- tcx.defaultness(def_id)) - 7 7 items record_value!(self.tables.impl_is_fully_generic_for_reflection[def_id] <- impl_is_fully_generic_for_reflection) + 22 22 items record_some_lazy!(self.tables.visibility[def_id] <- vis) + 13 13 items record_value!(self.tables.asyncness[def_id] <- asyncness) + 33 33 items record_value!(self.tables.attr_flags[def_id.to_def_id()] <- attr_flags) + 17 17 items record_value!(self.tables.constness[def_id] <- constness) + 2 2 items record_value!(self.tables.coroutine_kind[def_id] <- Some(coroutine_kind)) + 10 10 items record_value!(self.tables.cross_crate_inlinable[def_id.to_def_id()] <- self.tcx.cross_crate_inlinable(def_id)) + 54 54 items record_value!(self.tables.def_path_hashes[def_id] <- def_path_hash.local_hash().as_u64()) + 10 10 items record_value!(self.tables.defaultness[def_id] <- item.defaultness(tcx)) + 8 8 items record_value!(self.tables.defaultness[def_id] <- tcx.defaultness(def_id)) + 8 8 items record_value!(self.tables.impl_is_fully_generic_for_reflection[def_id] <- impl_is_fully_generic_for_reflection) 1 1 items record_value!(self.tables.safety[field.did] <- field.safety) - 391 0 items self.set(i, Some(value)) - 10 10 items syntax_contexts.set_some(index, this.lazy(ctxt_data)) + 590 0 items self.set(i, Some(value)) + 15 15 items syntax_contexts.set_some(index, this.lazy(ctxt_data)) read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote - 467 19 items 19 tracked adt_def - 14 12 items 12 tracked adt_destructor - 2 1 items 1 tracked anon_const_kind - 3455 508 items 508 tracked associated_item - 74 37 items 37 tracked associated_item_def_ids + 675 27 items 27 tracked adt_def + 15 13 items 13 tracked adt_destructor + 152 76 items 76 tracked anon_const_kind + 4636 682 items 682 tracked associated_item + 110 55 items 55 tracked associated_item_def_ids 12 6 items 6 tracked associated_types_for_impl_traits_in_trait_or_impl - 1 1 items 1 tracked asyncness - 70 30 items 30 tracked attrs_for_def + 4 4 items 4 tracked asyncness + 170 58 items 58 tracked attrs_for_def 19 19 items 19 tracked canonical_symbols - 28 14 items 14 tracked codegen_fn_attrs - 12 6 items 6 tracked const_conditions - 13 13 items 13 tracked constness + 2 1 items 1 tracked closure_saved_names_of_captured_variables + 234 117 items 117 tracked codegen_fn_attrs + 20 10 items 10 tracked const_conditions + 54 54 items 54 tracked constness + 1 1 items 1 tracked coroutine_kind 3 3 items 3 tracked crate_name - 2 2 items 2 tracked cross_crate_inlinable - 18 9 items 9 tracked def_ident_span - 129 129 items 129 tracked def_kind - 78 30 items 30 tracked def_span - 40 40 items 40 tracked defaultness + 85 85 items 85 tracked cross_crate_inlinable + 26 13 items 13 tracked def_ident_span + 397 397 items 397 tracked def_kind + 472 220 items 220 tracked def_span + 73 73 items 73 tracked defaultness 35 19 items 19 tracked defined_lang_items 7 7 items 7 tracked diagnostic_items - 184 77 items 77 tracked explicit_clauses_of - 40 22 items 22 tracked explicit_implied_clauses_of - 8 5 items 5 tracked explicit_implied_const_bounds - 6 4 items 4 tracked explicit_super_clauses_of - 20 8 items 8 tracked expn_that_defined - 1 1 items 1 tracked exportable_items - 1 1 items 1 tracked exported_non_generic_symbols + 426 198 items 198 tracked explicit_clauses_of + 63 34 items 34 tracked explicit_implied_clauses_of + 9 6 items 6 tracked explicit_implied_const_bounds + 2 1 items 1 tracked explicit_item_bounds + 2 1 items 1 tracked explicit_item_self_bounds + 19 11 items 11 tracked explicit_super_clauses_of + 28 12 items 12 tracked expn_that_defined + 2 2 items 2 tracked exportable_items + 20 18 items 18 tracked exported_generic_symbols + 2 2 items 2 tracked exported_non_generic_symbols 19 19 items 19 tracked externally_implementable_items - 32 16 items 16 tracked fn_sig - 148 74 items 74 tracked generics_of - 4 4 items 4 tracked impl_parent - 72 36 items 36 tracked impl_trait_header - 144 144 items 144 tracked implementations_of_trait - 79 77 items 77 tracked inferred_outlives_of - 8 4 items 4 tracked inherent_impls - 11 10 items 10 tracked intrinsic_raw - 1 1 items 1 tracked is_mir_available + 238 119 items 119 tracked fn_sig + 578 289 items 289 tracked generics_of + 13 13 items 13 tracked impl_parent + 108 54 items 54 tracked impl_trait_header + 162 162 items 162 tracked implementations_of_trait + 200 198 items 198 tracked inferred_outlives_of + 10 5 items 5 tracked inherent_impls + 57 52 items 52 tracked intrinsic_raw + 19 19 items 19 tracked is_mir_available 2 2 items 2 tracked lookup_default_body_stability - 22 22 items 22 tracked lookup_deprecation_entry - 66 33 items 33 tracked lookup_stability - 6 3 items 3 tracked mir_for_ctfe + 27 27 items 27 tracked lookup_deprecation_entry + 76 38 items 38 tracked lookup_stability + 194 87 items 87 tracked mir_for_ctfe 19 19 items 19 tracked missing_lang_items 4145 47 items 47 tracked module_children 23 19 items 19 tracked native_libraries 4 2 items 2 tracked object_lifetime_default - 2 1 items 1 tracked optimized_mir - 537 1 items 1 tracked reachable_non_generics - 1 1 items 1 tracked stable_order_of_exportable_impls - 52 25 items 25 tracked trait_def - 3 3 items 3 tracked trivial_const + 178 18 items 18 tracked optimized_mir + 642 2 items 2 tracked reachable_non_generics + 2 2 items 2 tracked stable_order_of_exportable_impls + 80 38 items 38 tracked trait_def + 93 83 items 83 tracked trivial_const 1 1 items 1 tracked type_alias_is_checked - 138 69 items 69 tracked type_of + 434 217 items 217 tracked type_of 24 12 items 12 tracked variances_of - 186 93 items 93 tracked visibility - 3 0 items 0 tracked ? crate_incoherent_impls + 278 139 items 139 tracked visibility + 5 0 items 0 tracked ? crate_incoherent_impls read outside a query - 139 CrateMetadata::def_kind in - - 40322 CrateMetadata::def_path_hash in - - 142 CrateMetadata::get_expn_that_defined in - + 148 CrateMetadata::def_kind in - + 43229 CrateMetadata::def_path_hash in - + 144 CrateMetadata::get_expn_that_defined in - 14 CrateMetadata::get_item_attrs in - 21 CrateMetadata::get_macro in - - 2032 CrateMetadata::get_span in - + 2034 CrateMetadata::get_span in - 14 CrateMetadata::opt_item_ident in - 19 CrateRoot>::decode_denied_partial_mitigations in - 19 CrateRoot>::decode_target_modifiers in - - 3 MetadataBlob::check_compatibility in - - 4 MetadataBlob::get_header in - - 1 MetadataBlob::get_root in - + 6 MetadataBlob::check_compatibility in - + 8 MetadataBlob::get_header in - + 2 MetadataBlob::get_root in - 40 decode_expn_id::{closure#0} in - - 136 def_key::{closure#0} in - + 282 def_key::{closure#0} in - 47 get_ambig_module_children::{closure#0} in - 54 imported_source_file::{closure#2} in - 76 CrateMetadata::new in CStore::register_crate @@ -385,8 +414,8 @@ read outside a query 37 MetadataBlob::get_root in CStore::register_crate 38 MetadataBlob::get_root_unhashed in CStore::register_crate 43 new::{closure#1} in CStore::register_crate - 810 CrateMetadata::def_path_hash in encoder::encode_metadata - 4 def_key::{closure#0} in encoder::encode_metadata + 5749 CrateMetadata::def_path_hash in encoder::encode_metadata + 128 def_key::{closure#0} in encoder::encode_metadata == mid (lib) emit dep-info,metadata,link == files @@ -434,6 +463,7 @@ encoded 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[def_id] <- associated_item_def_ids.iter().map(|&def_id| { assert!(def_id.is_local()); def_id.index }) 1 1 items record_array!(self.tables.associated_item_or_field_def_ids[variant.def_id] <- variant.fields.iter().map(|f| { assert!(f.did.is_local()); f.did.index })) 11 11 items record_array!(self.tables.attributes[def_id.to_def_id()] <- attr_iter) + 1 1 items record_array!(self.tables.doc_link_traits_in_scope[def_id.to_def_id()] <- traits) 2 2 items record_array!(self.tables.fn_arg_idents[def_id] <- tcx.fn_arg_idents(def_id)) 2 1 items record_array!(self.tables.module_children_non_reexports[def_id] <- module_children.iter().filter(|child| child.reexport_chain.is_empty()) .map(|child| child.res 3 3 items record_array!(self.tables.variances_of[def_id] <- v) @@ -450,6 +480,7 @@ encoded 12 12 items record_some_lazy!(self.tables.def_ident_span[def_id] <- ident_span) 16 16 items record_some_lazy!(self.tables.def_keys[def_id] <- def_key) 16 16 items record_some_lazy!(self.tables.def_span[def_id] <- def_span) + 1 1 items record_some_lazy!(self.tables.doc_link_resolutions[def_id.to_def_id()] <- res_map) 9 9 items record_some_lazy!(self.tables.explicit_clauses_of[def_id] <- self.tcx.explicit_clauses_of(def_id)) 3 3 items record_some_lazy!(self.tables.expn_that_defined[def_id] <- self.tcx.expn_that_defined(def_id)) 2 2 items record_some_lazy!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id)) @@ -476,7 +507,7 @@ encoded 1 1 items record_value!(self.tables.impl_is_fully_generic_for_reflection[def_id] <- impl_is_fully_generic_for_reflection) 2 2 items record_value!(self.tables.safety[field.did] <- field.safety) 1 1 items record_value!(self.tables.type_alias_is_checked[def_id] <- self.tcx.type_alias_is_checked(def_id)) - 144 0 items self.set(i, Some(value)) + 146 0 items self.set(i, Some(value)) 2 2 items syntax_contexts.set_some(index, this.lazy(ctxt_data)) read through queries: reads, items, items whose query recorded a dependency on the crate, entries the writer wrote 154 6 items 6 tracked adt_def @@ -554,10 +585,10 @@ read through queries: reads, items, items whose query recorded a dependency on t 5 5 items 5 tracked 0 written base lookup_deprecation_entry 6 6 items 6 tracked base lookup_stability 1 1 items 1 tracked base missing_lang_items - 76 2 items 2 tracked base module_children + 97 2 items 2 tracked base module_children 1 1 items 1 tracked base native_libraries 2 1 items 1 tracked 1 written base optimized_mir - 3 1 items 1 tracked base reachable_non_generics + 6 1 items 1 tracked base reachable_non_generics 2 1 items 1 tracked 1 written base trait_def 2 1 items 1 tracked 1 written base trivial_const 6 3 items 3 tracked 3 written base type_of @@ -565,9 +596,9 @@ read through queries: reads, items, items whose query recorded a dependency on t 8 4 items 4 tracked 4 written base visibility read outside a query 61 CrateMetadata::def_kind in - - 12491 CrateMetadata::def_path_hash in - + 12535 CrateMetadata::def_path_hash in - 122 CrateMetadata::get_expn_that_defined in - - 1130 CrateMetadata::get_span in - + 1136 CrateMetadata::get_span in - 20 CrateRoot>::decode_denied_partial_mitigations in - 20 CrateRoot>::decode_target_modifiers in - 5 MetadataBlob::check_compatibility in - @@ -584,6 +615,6 @@ read outside a query 38 MetadataBlob::get_root in CStore::register_crate 40 MetadataBlob::get_root_unhashed in CStore::register_crate 43 new::{closure#1} in CStore::register_crate - 1563 CrateMetadata::def_path_hash in encoder::encode_metadata + 1566 CrateMetadata::def_path_hash in encoder::encode_metadata 6 def_key::{closure#0} in encoder::encode_metadata