Move TRY_LOAD_FROM_DISK out of rustc_queries to rustc_query_impl

We want to refer to `crate::plumbing::try_load_from_disk` in the const, but hard-coding it in
rustc_queries, where we don't yet know the crate this macro will be called in, seems kind of hacky.
Do it in query_impl instead.
This commit is contained in:
Joshua Nelson 2022-09-05 06:43:11 -05:00
parent 7208bdee33
commit 9273782d55
2 changed files with 7 additions and 5 deletions

View File

@ -253,9 +253,6 @@ fn add_query_description_impl(query: &Query, impls: &mut proc_macro2::TokenStrea
fn cache_on_disk(#tcx: TyCtxt<'tcx>, #key: &Self::Key) -> bool { fn cache_on_disk(#tcx: TyCtxt<'tcx>, #key: &Self::Key) -> bool {
#expr #expr
} }
const TRY_LOAD_FROM_DISK: Option<fn(QueryCtxt<'tcx>, SerializedDepNodeIndex) -> Option<Self::Value>>
= Some(crate::plumbing::try_load_from_disk::<Self::Value>);
} }
} else { } else {
quote! { quote! {
@ -263,8 +260,6 @@ fn add_query_description_impl(query: &Query, impls: &mut proc_macro2::TokenStrea
fn cache_on_disk(_: TyCtxt<'tcx>, _: &Self::Key) -> bool { fn cache_on_disk(_: TyCtxt<'tcx>, _: &Self::Key) -> bool {
false false
} }
const TRY_LOAD_FROM_DISK: Option<fn(QueryCtxt<'tcx>, SerializedDepNodeIndex) -> Option<Self::Value>> = None;
} }
}; };
@ -333,6 +328,10 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream {
remap_env_constness, remap_env_constness,
); );
if modifiers.cache.is_some() {
attributes.push(quote! { (cache) });
}
// This uses the span of the query definition for the commas, // This uses the span of the query definition for the commas,
// which can be important if we later encounter any ambiguity // which can be important if we later encounter any ambiguity
// errors with any of the numerous macro_rules! macros that // errors with any of the numerous macro_rules! macros that

View File

@ -412,6 +412,9 @@ macro_rules! define_queries {
impl<'tcx> QueryDescription<QueryCtxt<'tcx>> for queries::$name<'tcx> { impl<'tcx> QueryDescription<QueryCtxt<'tcx>> for queries::$name<'tcx> {
rustc_query_description! { $name } rustc_query_description! { $name }
const TRY_LOAD_FROM_DISK: Option<fn(QueryCtxt<'tcx>, SerializedDepNodeIndex) -> Option<Self::Value>>
= should_ever_cache_on_disk!([$($modifiers)*]);
type Cache = query_storage::$name<'tcx>; type Cache = query_storage::$name<'tcx>;
#[inline(always)] #[inline(always)]