Auto merge of #89343 - Mark-Simulacrum:no-args-queries, r=cjgillot
Refactor fingerprint reconstruction This PR replaces can_reconstruct_query_key with fingerprint_style, which returns the style of the fingerprint for that query. This allows us to avoid trying to extract a DefId (or equivalent) from keys which *are* reconstructible because they're () but not as DefIds. This is done with the goal of fixing -Zdump-dep-graph, which seems to have broken a while ago (I didn't try to bisect). Currently even on a `fn main() {}` file it'll ICE (you need to also pass -Zquery-dep-graph for it to work at all), and this patch indirectly fixes the cause of that ICE. This also adds a test for it continuing to work.
This commit is contained in:
commit
15491d7b6b
8 changed files with 87 additions and 48 deletions
|
@ -428,6 +428,7 @@ macro_rules! define_queries {
|
|||
use rustc_middle::ty::query::query_keys;
|
||||
use rustc_query_system::dep_graph::DepNodeParams;
|
||||
use rustc_query_system::query::{force_query, QueryDescription};
|
||||
use rustc_query_system::dep_graph::FingerprintStyle;
|
||||
|
||||
// We use this for most things when incr. comp. is turned off.
|
||||
pub const Null: QueryStruct = QueryStruct {
|
||||
|
@ -454,9 +455,9 @@ macro_rules! define_queries {
|
|||
const is_anon: bool = is_anon!([$($modifiers)*]);
|
||||
|
||||
#[inline(always)]
|
||||
fn can_reconstruct_query_key() -> bool {
|
||||
fn fingerprint_style() -> FingerprintStyle {
|
||||
<query_keys::$name<'_> as DepNodeParams<TyCtxt<'_>>>
|
||||
::can_reconstruct_query_key()
|
||||
::fingerprint_style()
|
||||
}
|
||||
|
||||
fn recover<'tcx>(tcx: TyCtxt<'tcx>, dep_node: &DepNode) -> Option<query_keys::$name<'tcx>> {
|
||||
|
@ -472,7 +473,7 @@ macro_rules! define_queries {
|
|||
return
|
||||
}
|
||||
|
||||
if !can_reconstruct_query_key() {
|
||||
if !fingerprint_style().reconstructible() {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue