Rollup merge of #163455 - Daniel-B-Smith:smithdb3/163426, r=bjorn3 Don't use the metadata based crate_hash for rustdoc runs When a metrics dir is provided for a rustdoc invocation, the crate hash is used to generate the file name for the metrics. Prior to this change, `tcx.needs_metadata()` mistakenly returned true, so the crate_hash query would attempt to read the SVH created as a side effect of the metadata generation. Since metadata is not generated for rustdoc, that SVH was not present, which triggered the ICE. This PR marks `tcx.needs_metadata()` as false for rustdoc runs, which causes the crate_hash query to use the fallback HIR based hash. One caveat: rust-lang/rust#154724 made the HIR based hash simpler under the assumption that it would only be used for things like dylibs. Specifically, it removed resolutions.visibilities_for_hashing, debugger_visualizers and source_file_names. The latter two are irrelevant for rustdoc, but the first is potentially relevant. However, the hash only has to change when the metrics output it names would change, and the output it names is a list of enabled features, which visibility can't affect. LLM: Claude was used to generate the tests that reproduce the issue. Fixes: rust-lang/rust#163426 Regression introduced in rust-lang/rust#154724 Related to rust-lang/rust#94878
Website | Getting started | Learn | Documentation | Contributing
This is the main source code repository for Rust. It contains the compiler, standard library, and documentation.
Performance: Fast and memory-efficient, suitable for critical services, embedded devices, and easily integrated with other languages.
Reliability: Our rich type system and ownership model ensure memory and thread safety, reducing bugs at compile-time.
Productivity: Comprehensive documentation, a compiler committed to providing great diagnostics, and advanced tooling including package manager and build tool (Cargo), auto-formatter (rustfmt), linter (Clippy) and editor support (rust-analyzer).
Read “Installation” from The Book.
If you really want to install from source (though this is not recommended), see INSTALL.md.
See https://www.rust-lang.org/community for a list of chat platforms and forums.
See CONTRIBUTING.md.
For a detailed explanation of the compiler's architecture and how to begin contributing, see the rustc-dev-guide.
Rust is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.
See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.
The Rust Foundation owns and protects the Rust and Cargo trademarks and logos (the “Rust Trademarks”).
If you want to use these names or brands, please read the Rust language trademark policy.
Third-party logos may be subject to third-party copyrights and trademarks. See Licenses for details.