]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc/query/mod.rs
Rollup merge of #67873 - Dylan-DPC:feature/change-remove-to-partial, r=Amanieu
[rust.git] / src / librustc / query / mod.rs
index a9dd856e75857442f3f84fec3059b91609a63b0a..e81497351cabba79a44a4f3ea502a7cc7ef54025 100644 (file)
@@ -1,21 +1,28 @@
-use crate::ty::query::QueryDescription;
-use crate::ty::query::queries;
-use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
-use crate::ty::subst::SubstsRef;
-use crate::dep_graph::{RecoverKey,DepKind, DepNode, SerializedDepNodeIndex};
+use crate::dep_graph::{DepKind, DepNode, RecoverKey, SerializedDepNodeIndex};
 use crate::hir::def_id::{CrateNum, DefId, DefIndex};
 use crate::mir;
 use crate::mir::interpret::GlobalId;
 use crate::traits;
 use crate::traits::query::{
-    CanonicalPredicateGoal, CanonicalProjectionGoal,
-    CanonicalTyGoal, CanonicalTypeOpAscribeUserTypeGoal,
-    CanonicalTypeOpEqGoal, CanonicalTypeOpSubtypeGoal, CanonicalTypeOpProvePredicateGoal,
-    CanonicalTypeOpNormalizeGoal,
+    CanonicalPredicateGoal, CanonicalProjectionGoal, CanonicalTyGoal,
+    CanonicalTypeOpAscribeUserTypeGoal, CanonicalTypeOpEqGoal, CanonicalTypeOpNormalizeGoal,
+    CanonicalTypeOpProvePredicateGoal, CanonicalTypeOpSubtypeGoal,
 };
+use crate::ty::query::queries;
+use crate::ty::query::QueryDescription;
+use crate::ty::subst::SubstsRef;
+use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
 
+use rustc_span::symbol::Symbol;
 use std::borrow::Cow;
-use syntax_pos::symbol::Symbol;
+
+fn describe_as_module(def_id: DefId, tcx: TyCtxt<'_>) -> String {
+    if def_id.is_top_level_module() {
+        format!("top-level module")
+    } else {
+        format!("module `{}`", tcx.def_path_str(def_id))
+    }
+}
 
 // Each of these queries corresponds to a function pointer field in the
 // `Providers` struct for requesting a value of that type, and a method
 
     Other {
         query lint_mod(key: DefId) -> () {
-            desc { |tcx| "linting {}", key.describe_as_module(tcx) }
+            desc { |tcx| "linting {}", describe_as_module(key, tcx) }
         }
 
         /// Checks the attributes in the module.
         query check_mod_attrs(key: DefId) -> () {
-            desc { |tcx| "checking attributes in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking attributes in {}", describe_as_module(key, tcx) }
         }
 
         query check_mod_unstable_api_usage(key: DefId) -> () {
-            desc { |tcx| "checking for unstable API usage in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking for unstable API usage in {}", describe_as_module(key, tcx) }
         }
 
         /// Checks the const bodies in the module for illegal operations (e.g. `if` or `loop`).
         query check_mod_const_bodies(key: DefId) -> () {
-            desc { |tcx| "checking consts in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking consts in {}", describe_as_module(key, tcx) }
         }
 
         /// Checks the loops in the module.
         query check_mod_loops(key: DefId) -> () {
-            desc { |tcx| "checking loops in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking loops in {}", describe_as_module(key, tcx) }
         }
 
         query check_mod_item_types(key: DefId) -> () {
-            desc { |tcx| "checking item types in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking item types in {}", describe_as_module(key, tcx) }
         }
 
         query check_mod_privacy(key: DefId) -> () {
-            desc { |tcx| "checking privacy in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking privacy in {}", describe_as_module(key, tcx) }
         }
 
         query check_mod_intrinsics(key: DefId) -> () {
-            desc { |tcx| "checking intrinsics in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking intrinsics in {}", describe_as_module(key, tcx) }
         }
 
         query check_mod_liveness(key: DefId) -> () {
-            desc { |tcx| "checking liveness of variables in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking liveness of variables in {}", describe_as_module(key, tcx) }
         }
 
         query check_mod_impl_wf(key: DefId) -> () {
-            desc { |tcx| "checking that impls are well-formed in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "checking that impls are well-formed in {}", describe_as_module(key, tcx) }
         }
 
         query collect_mod_item_types(key: DefId) -> () {
-            desc { |tcx| "collecting item types in {}", key.describe_as_module(tcx) }
+            desc { |tcx| "collecting item types in {}", describe_as_module(key, tcx) }
         }
 
         /// Caches `CoerceUnsized` kinds for impls on custom types.
                 typeck_tables.map(|tables| &*tcx.arena.alloc(tables))
             }
         }
+        query diagnostic_only_typeck_tables_of(key: DefId) -> &'tcx ty::TypeckTables<'tcx> {
+            cache_on_disk_if { key.is_local() }
+            load_cached(tcx, id) {
+                let typeck_tables: Option<ty::TypeckTables<'tcx>> = tcx
+                    .queries.on_disk_cache
+                    .try_load_query_result(tcx, id);
+
+                typeck_tables.map(|tables| &*tcx.arena.alloc(tables))
+            }
+        }
     }
 
     Other {
             desc { "extract field of const" }
         }
 
-        query const_caller_location(key: (syntax_pos::Symbol, u32, u32)) -> &'tcx ty::Const<'tcx> {
+        query const_caller_location(key: (rustc_span::Symbol, u32, u32)) -> &'tcx ty::Const<'tcx> {
             no_force
             desc { "get a &core::panic::Location referring to a span" }
         }
     }
 
     Other {
-        query reachable_set(_: CrateNum) -> ReachableSet {
+        query reachable_set(_: CrateNum) -> Lrc<HirIdSet> {
             desc { "reachability" }
         }