From 3e96936c1fea08d1e9c179ac277f163b1bf4fb95 Mon Sep 17 00:00:00 2001 From: Zack Maril Date: Wed, 7 Oct 2026 01:22:16 +0000 Subject: [PATCH] Replay seven past rustc bugs rustc/regressions holds seven patches that each revert a merged fix on the pinned compiler: #122891, #130201, #138678, #143247, #82047, #144050 and #162910. EDITS=regressions rustc/edits.sh applies, checks and reverts them, writing docs/regressions/*.txt. docs/regressions.md has the results: mirth catches five, the selected rustc tests none (the tests each fix added are outside the selection), and three of the five needed something added knowing the bug. check.sh gains two steps: P5 for two builds with -Zthreads=8, and an incremental rebuild after touching every source file, compared with tests/rmeta/.touch.txt, which shows whether metadata was reused from the incremental cache. The normalisation replaces incremental session directory names. A failed build now prints why. The chain fixture gets an async closure called by value downstream, a trait returning impl Trait, a #[no_mangle] function, and a doc comment with unused reference definitions; the lists are blessed again. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_018Mnrg9JXj9X1ht6Qkz2ybh --- README.md | 10 + crates/mirth-cli/src/normalize.rs | 10 + docs/regressions.md | 126 ++++++ docs/regressions/122891-implied-clauses.txt | 141 ++++++ docs/regressions/130201-by-move-body.txt | 46 ++ docs/regressions/138678-doc-link-order.txt | 325 ++++++++++++++ docs/regressions/143247-forever-red.txt | 299 +++++++++++++ .../144050-no-mangle-cross-crate.txt | 19 + .../162910-defpathhashmap-order.txt | 19 + .../82047-remove-before-rename.txt | 57 +++ docs/regressions/none.txt | 19 + fixtures/chain/base/src/lib.rs | 27 +- fixtures/chain/mid/src/lib.rs | 11 + fixtures/chain/src/main.rs | 26 +- rustc/check.sh | 32 +- rustc/edits.sh | 14 +- .../regressions/122891-implied-clauses.patch | 31 ++ rustc/regressions/130201-by-move-body.patch | 17 + rustc/regressions/138678-doc-link-order.patch | 19 + rustc/regressions/143247-forever-red.patch | 14 + .../144050-no-mangle-cross-crate.patch | 20 + .../162910-defpathhashmap-order.patch | 221 ++++++++++ .../82047-remove-before-rename.patch | 10 + tests/rmeta/chain.touch.txt | 304 +++++++++++++ tests/rmeta/chain.txt | 409 ++++++++++-------- 25 files changed, 2026 insertions(+), 200 deletions(-) create mode 100644 docs/regressions.md create mode 100644 docs/regressions/122891-implied-clauses.txt create mode 100644 docs/regressions/130201-by-move-body.txt create mode 100644 docs/regressions/138678-doc-link-order.txt create mode 100644 docs/regressions/143247-forever-red.txt create mode 100644 docs/regressions/144050-no-mangle-cross-crate.txt create mode 100644 docs/regressions/162910-defpathhashmap-order.txt create mode 100644 docs/regressions/82047-remove-before-rename.txt create mode 100644 docs/regressions/none.txt create mode 100644 rustc/regressions/122891-implied-clauses.patch create mode 100644 rustc/regressions/130201-by-move-body.patch create mode 100644 rustc/regressions/138678-doc-link-order.patch create mode 100644 rustc/regressions/143247-forever-red.patch create mode 100644 rustc/regressions/144050-no-mangle-cross-crate.patch create mode 100644 rustc/regressions/162910-defpathhashmap-order.patch create mode 100644 rustc/regressions/82047-remove-before-rename.patch create mode 100644 tests/rmeta/chain.touch.txt 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