Skip to content

Commit cae3639

Browse files
committed
Monomorphise encode_query_results.
1 parent f03e9ce commit cae3639

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

src/librustc/ty/query/config.rs

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub(crate) struct QueryVtable<'tcx, K, V> {
3030
pub anon: bool,
3131
pub dep_kind: DepKind,
3232
pub eval_always: bool,
33+
pub name: &'static str,
3334

3435
// Don't use this method to compute query results, instead use the methods on TyCtxt
3536
pub compute: fn(TyCtxt<'tcx>, K) -> V,
@@ -103,6 +104,7 @@ pub(crate) trait QueryDescription<'tcx>: QueryAccessors<'tcx> {
103104
anon: Self::ANON,
104105
dep_kind: Self::DEP_KIND,
105106
eval_always: Self::EVAL_ALWAYS,
107+
name: Self::NAME,
106108
compute: Self::compute,
107109
hash_result: Self::hash_result,
108110
cache_on_disk: Self::cache_on_disk,

src/librustc/ty/query/on_disk_cache.rs

+13-9
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::mir::{self, interpret};
66
use crate::session::{CrateDisambiguator, Session};
77
use crate::ty::codec::{self as ty_codec, TyDecoder, TyEncoder};
88
use crate::ty::context::TyCtxt;
9+
use crate::ty::query::config::{QueryAccessors, QueryDescription, QueryVtable};
910
use crate::ty::{self, Ty};
1011
use rustc_ast::ast::Ident;
1112
use rustc_data_structures::fx::FxHashMap;
@@ -205,8 +206,10 @@ impl<'sess> OnDiskCache<'sess> {
205206
macro_rules! encode_queries {
206207
($($query:ident,)*) => {
207208
$(
208-
encode_query_results::<ty::query::queries::$query<'_>, _>(
209+
encode_query_results(
209210
tcx,
211+
ty::query::queries::$query::query_state(tcx),
212+
&ty::query::queries::$query::reify(),
210213
enc,
211214
qri
212215
)?;
@@ -1022,26 +1025,27 @@ impl<'a> SpecializedDecoder<IntEncodedWithFixedSize> for opaque::Decoder<'a> {
10221025
}
10231026
}
10241027

1025-
fn encode_query_results<'a, 'tcx, Q, E>(
1028+
fn encode_query_results<'a, 'tcx, C, E>(
10261029
tcx: TyCtxt<'tcx>,
1030+
state: &'a super::plumbing::QueryState<'tcx, C>,
1031+
query: &QueryVtable<'tcx, C::Key, C::Value>,
10271032
encoder: &mut CacheEncoder<'a, 'tcx, E>,
10281033
query_result_index: &mut EncodedQueryResultIndex,
10291034
) -> Result<(), E::Error>
10301035
where
1031-
Q: super::config::QueryDescription<'tcx, Value: Encodable>,
1036+
C: super::caches::QueryCache,
10321037
E: 'a + TyEncoder,
1038+
C::Key: Clone,
1039+
C::Value: Encodable,
10331040
{
1034-
let _timer = tcx
1035-
.sess
1036-
.prof
1037-
.extra_verbose_generic_activity("encode_query_results_for", ::std::any::type_name::<Q>());
1041+
let _timer =
1042+
tcx.sess.prof.extra_verbose_generic_activity("encode_query_results_for", query.name);
10381043

1039-
let state = Q::query_state(tcx);
10401044
assert!(state.all_inactive());
10411045

10421046
state.iter_results(|results| {
10431047
for (key, value, dep_node) in results {
1044-
if Q::cache_on_disk(tcx, key.clone(), Some(&value)) {
1048+
if query.cache_on_disk(tcx, key.clone(), Some(&value)) {
10451049
let dep_node = SerializedDepNodeIndex::new(dep_node.index());
10461050

10471051
// Record position of the cache entry.

0 commit comments

Comments
 (0)