From 44a0522b180805e9ff0d6b5009c031f6d131b4a6 Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Wed, 20 Dec 2017 16:45:23 +0100 Subject: [PATCH] incr.comp.: Use ensure() for some coherence-related queries. --- src/librustc/ty/maps/config.rs | 2 +- src/librustc/ty/maps/mod.rs | 6 +----- src/librustc/ty/util.rs | 4 ++-- src/librustc_typeck/coherence/mod.rs | 13 ++++++------- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/librustc/ty/maps/config.rs b/src/librustc/ty/maps/config.rs index 5ca951d0fb3..f2fe12dedc2 100644 --- a/src/librustc/ty/maps/config.rs +++ b/src/librustc/ty/maps/config.rs @@ -102,7 +102,7 @@ fn describe(tcx: TyCtxt, (_, def_id): (DefId, DefId)) -> String { } impl<'tcx> QueryDescription<'tcx> for queries::coherent_trait<'tcx> { - fn describe(tcx: TyCtxt, (_, def_id): (CrateNum, DefId)) -> String { + fn describe(tcx: TyCtxt, def_id: DefId) -> String { format!("coherence checking all impls of trait `{}`", tcx.item_path_str(def_id)) } diff --git a/src/librustc/ty/maps/mod.rs b/src/librustc/ty/maps/mod.rs index 23531b7b942..7c9d274e1fe 100644 --- a/src/librustc/ty/maps/mod.rs +++ b/src/librustc/ty/maps/mod.rs @@ -187,7 +187,7 @@ [] fn has_typeck_tables: HasTypeckTables(DefId) -> bool, - [] fn coherent_trait: coherent_trait_dep_node((CrateNum, DefId)) -> (), + [] fn coherent_trait: CoherenceCheckTrait(DefId) -> (), [] fn borrowck: BorrowCheck(DefId) -> Rc, @@ -385,10 +385,6 @@ fn fulfill_obligation_dep_node<'tcx>((param_env, trait_ref): } } -fn coherent_trait_dep_node<'tcx>((_, def_id): (CrateNum, DefId)) -> DepConstructor<'tcx> { - DepConstructor::CoherenceCheckTrait(def_id) -} - fn crate_inherent_impls_dep_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { DepConstructor::Coherence } diff --git a/src/librustc/ty/util.rs b/src/librustc/ty/util.rs index 9b930233fad..85052052b32 100644 --- a/src/librustc/ty/util.rs +++ b/src/librustc/ty/util.rs @@ -11,7 +11,7 @@ //! misc. type-system utilities too small to deserve their own file use hir::def::Def; -use hir::def_id::{DefId, LOCAL_CRATE}; +use hir::def_id::DefId; use hir::map::{DefPathData, Node}; use hir; use ich::NodeIdHashingMode; @@ -427,7 +427,7 @@ pub fn calculate_dtor( return None; }; - self.coherent_trait((LOCAL_CRATE, drop_trait)); + ty::maps::queries::coherent_trait::ensure(self, drop_trait); let mut dtor_did = None; let ty = self.type_of(adt_did); diff --git a/src/librustc_typeck/coherence/mod.rs b/src/librustc_typeck/coherence/mod.rs index 90a0952af04..adf154968c2 100644 --- a/src/librustc_typeck/coherence/mod.rs +++ b/src/librustc_typeck/coherence/mod.rs @@ -15,8 +15,8 @@ // done by the orphan and overlap modules. Then we build up various // mappings. That mapping code resides here. -use hir::def_id::{CrateNum, DefId, LOCAL_CRATE}; -use rustc::ty::{TyCtxt, TypeFoldable}; +use hir::def_id::{DefId, LOCAL_CRATE}; +use rustc::ty::{self, TyCtxt, TypeFoldable}; use rustc::ty::maps::Providers; use syntax::ast; @@ -113,8 +113,7 @@ pub fn provide(providers: &mut Providers) { }; } -fn coherent_trait<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, - (_, def_id): (CrateNum, DefId)) { +fn coherent_trait<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) { let impls = tcx.hir.trait_impls(def_id); for &impl_id in impls { check_impl(tcx, impl_id); @@ -127,7 +126,7 @@ fn coherent_trait<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, pub fn check_coherence<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { for &trait_def_id in tcx.hir.krate().trait_impls.keys() { - tcx.coherent_trait((LOCAL_CRATE, trait_def_id)); + ty::maps::queries::coherent_trait::ensure(tcx, trait_def_id); } unsafety::check(tcx); @@ -135,6 +134,6 @@ pub fn check_coherence<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { overlap::check_auto_impls(tcx); // these queries are executed for side-effects (error reporting): - tcx.crate_inherent_impls(LOCAL_CRATE); - tcx.crate_inherent_impls_overlap_check(LOCAL_CRATE); + ty::maps::queries::crate_inherent_impls::ensure(tcx, LOCAL_CRATE); + ty::maps::queries::crate_inherent_impls_overlap_check::ensure(tcx, LOCAL_CRATE); } -- GitLab