let mut query_result_index = EncodedQueryResultIndex::new();
time(tcx.sess, "encode query results", || {
- use crate::ty::query::queries::*;
let enc = &mut encoder;
let qri = &mut query_result_index;
- encode_query_results::<type_of<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<generics_of<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<predicates_of<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<used_trait_imports<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<typeck_tables_of<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<codegen_fulfill_obligation<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<optimized_mir<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<unsafety_check_result<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<borrowck<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<mir_borrowck<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<mir_const_qualif<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<const_is_rvalue_promotable_to_static<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<symbol_name<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<check_match<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<codegen_fn_attrs<'_>, _>(tcx, enc, qri)?;
- encode_query_results::<specialization_graph_of<'_>, _>(tcx, enc, qri)?;
-
- // const eval is special, it only encodes successfully evaluated constants
- use crate::ty::query::QueryAccessors;
- let cache = const_eval::query_cache(tcx).borrow();
- assert!(cache.active.is_empty());
- for (key, entry) in cache.results.iter() {
- use crate::ty::query::config::QueryDescription;
- if const_eval::cache_on_disk(tcx, key.clone()) {
- if let Ok(ref value) = entry.value {
- let dep_node = SerializedDepNodeIndex::new(entry.index.index());
-
- // Record position of the cache entry
- qri.push((dep_node, AbsoluteBytePos::new(enc.position())));
-
- // Encode the type check tables with the SerializedDepNodeIndex
- // as tag.
- enc.encode_tagged(dep_node, value)?;
- }
+ macro_rules! encode_queries {
+ ($($query:ident,)*) => {
+ $(
+ encode_query_results::<ty::query::queries::$query<'_>, _>(
+ tcx,
+ enc,
+ qri
+ )?;
+ )*
}
}
+ rustc_cached_queries!(encode_queries!);
+
Ok(())
})?;
}
/// Loads a diagnostic emitted during the previous compilation session.
- pub fn load_diagnostics<'tcx>(
+ pub fn load_diagnostics(
&self,
- tcx: TyCtxt<'tcx>,
+ tcx: TyCtxt<'_>,
dep_node_index: SerializedDepNodeIndex,
) -> Vec<Diagnostic> {
let diagnostics: Option<EncodedDiagnostics> = self.load_indexed(
/// Returns the cached query result if there is something in the cache for
/// the given `SerializedDepNodeIndex`; otherwise returns `None`.
- pub fn try_load_query_result<'tcx, T>(
+ pub fn try_load_query_result<T>(
&self,
- tcx: TyCtxt<'tcx>,
+ tcx: TyCtxt<'_>,
dep_node_index: SerializedDepNodeIndex,
) -> Option<T>
where
let map = Q::query_cache(tcx).borrow();
assert!(map.active.is_empty());
for (key, entry) in map.results.iter() {
- if Q::cache_on_disk(tcx, key.clone()) {
+ if Q::cache_on_disk(tcx, key.clone(), Some(&entry.value)) {
let dep_node = SerializedDepNodeIndex::new(entry.index.index());
// Record position of the cache entry