From 70f20ac40ea95f4bba330858750e81f4ab2b8b3a Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Tue, 23 Aug 2022 22:24:39 -0500 Subject: [PATCH] Move `force_with_dep_node` outside the giant macro --- compiler/rustc_query_impl/src/plumbing.rs | 42 ++++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/compiler/rustc_query_impl/src/plumbing.rs b/compiler/rustc_query_impl/src/plumbing.rs index e0707eee8ba..7c6b898751a 100644 --- a/compiler/rustc_query_impl/src/plumbing.rs +++ b/compiler/rustc_query_impl/src/plumbing.rs @@ -10,10 +10,11 @@ use rustc_errors::{Diagnostic, Handler}; use rustc_middle::dep_graph::{self, DepKind, DepNode, DepNodeIndex, SerializedDepNodeIndex}; use rustc_middle::ty::tls::{self, ImplicitCtxt}; use rustc_middle::ty::{self, TyCtxt}; -use rustc_query_system::dep_graph::HasDepContext; +use rustc_query_system::dep_graph::{DepNodeParams, HasDepContext}; use rustc_query_system::ich::StableHashingContext; use rustc_query_system::query::{ - QueryContext, QueryJobId, QueryMap, QuerySideEffects, QueryStackFrame, + force_query, QueryContext, QueryDescription, QueryJobId, QueryMap, QuerySideEffects, + QueryStackFrame, }; use std::any::Any; use std::num::NonZeroU64; @@ -315,6 +316,27 @@ pub(crate) fn try_load_from_on_disk_cache<'tcx, K, V>( } } +pub(crate) fn force_from_dep_node<'tcx, Q>( + tcx: TyCtxt<'tcx>, + // dep_node: rustc_query_system::dep_graph::DepNode, + dep_node: DepNode, + recover: fn(TyCtxt<'tcx>, DepNode) -> Option, +) -> bool +where + Q: QueryDescription>, + Q::Key: DepNodeParams>, +{ + if let Some(key) = recover(tcx, dep_node) { + #[cfg(debug_assertions)] + let _guard = tracing::span!(tracing::Level::TRACE, stringify!($name), ?key).entered(); + let tcx = QueryCtxt::from_tcx(tcx); + force_query::(tcx, key, dep_node); + true + } else { + false + } +} + // NOTE: `$V` isn't used here, but we still need to match on it so it can be passed to other macros // invoked by `rustc_query_append`. macro_rules! define_queries { @@ -385,7 +407,7 @@ macro_rules! define_queries { use super::*; use rustc_middle::dep_graph::DepNode; use rustc_query_system::dep_graph::DepNodeParams; - use rustc_query_system::query::{force_query, QueryDescription}; + use rustc_query_system::query::QueryDescription; use rustc_query_system::dep_graph::FingerprintStyle; // We use this for most things when incr. comp. is turned off. @@ -462,23 +484,11 @@ macro_rules! define_queries { < as QueryConfig>::Key as DepNodeParams>>::recover(tcx, &dep_node) } - fn force_from_dep_node(tcx: TyCtxt<'_>, dep_node: DepNode) -> bool { - if let Some(key) = recover(tcx, dep_node) { - #[cfg(debug_assertions)] - let _guard = tracing::span!(tracing::Level::TRACE, stringify!($name), ?key).entered(); - let tcx = QueryCtxt::from_tcx(tcx); - force_query::, _>(tcx, key, dep_node); - true - } else { - false - } - } - DepKindStruct { is_anon, is_eval_always, fingerprint_style, - force_from_dep_node: Some(force_from_dep_node), + force_from_dep_node: Some(|tcx, dep_node| $crate::plumbing::force_from_dep_node::>(tcx, dep_node, recover)), try_load_from_on_disk_cache: Some(|tcx, key| $crate::plumbing::try_load_from_on_disk_cache(tcx, key, recover, queries::$name::cache_on_disk, TyCtxt::$name)), } })*