From: Camille GILLOT Date: Sat, 15 May 2021 08:55:53 +0000 (+0200) Subject: Only test if key is local. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=8ed82ebb2ad82b1cb95b7f68482a3a6d201a7462;p=rust.git Only test if key is local. --- diff --git a/compiler/rustc_query_impl/src/keys.rs b/compiler/rustc_query_impl/src/keys.rs index 27a0dc47682..b3cc7de4662 100644 --- a/compiler/rustc_query_impl/src/keys.rs +++ b/compiler/rustc_query_impl/src/keys.rs @@ -14,7 +14,7 @@ pub trait Key { /// Given an instance of this key, what crate is it referring to? /// This is used to find the provider. - fn query_crate(&self) -> CrateNum; + fn query_crate_is_local(&self) -> bool; /// In the event that a cycle occurs, if no explicit span has been /// given for a query with key `self`, what span should we use? @@ -22,8 +22,9 @@ pub trait Key { } impl Key for () { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { @@ -32,8 +33,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for ty::InstanceDef<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { @@ -42,8 +44,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for ty::Instance<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { @@ -52,8 +55,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for mir::interpret::GlobalId<'tcx> { - fn query_crate(&self) -> CrateNum { - self.instance.query_crate() + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { @@ -62,8 +66,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for mir::interpret::LitToConstInput<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { @@ -72,8 +77,9 @@ fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { } impl Key for CrateNum { - fn query_crate(&self) -> CrateNum { - *self + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + *self == LOCAL_CRATE } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -81,8 +87,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl Key for LocalDefId { - fn query_crate(&self) -> CrateNum { - self.to_def_id().query_crate() + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.to_def_id().default_span(tcx) @@ -90,8 +97,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for DefId { - fn query_crate(&self) -> CrateNum { - self.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(*self) @@ -99,8 +107,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for ty::WithOptConstParam { - fn query_crate(&self) -> CrateNum { - self.did.query_crate() + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.did.default_span(tcx) @@ -108,8 +117,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (DefId, DefId) { - fn query_crate(&self) -> CrateNum { - self.0.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.0.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) @@ -117,8 +127,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (ty::Instance<'tcx>, LocalDefId) { - fn query_crate(&self) -> CrateNum { - self.0.query_crate() + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -126,8 +137,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (DefId, LocalDefId) { - fn query_crate(&self) -> CrateNum { - self.0.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.0.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) @@ -135,8 +147,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (LocalDefId, DefId) { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -144,8 +157,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (DefId, Option) { - fn query_crate(&self) -> CrateNum { - self.0.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.0.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.0) @@ -153,8 +167,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (DefId, LocalDefId, Ident) { - fn query_crate(&self) -> CrateNum { - self.0.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.0.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) @@ -162,8 +177,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (CrateNum, DefId) { - fn query_crate(&self) -> CrateNum { - self.0 + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.0 == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) @@ -171,8 +187,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for (DefId, SimplifiedType) { - fn query_crate(&self) -> CrateNum { - self.0.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.0.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -180,8 +197,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for SubstsRef<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -189,8 +207,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for (DefId, SubstsRef<'tcx>) { - fn query_crate(&self) -> CrateNum { - self.0.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.0.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -203,8 +222,9 @@ impl<'tcx> Key (ty::WithOptConstParam, SubstsRef<'tcx>), ) { - fn query_crate(&self) -> CrateNum { - (self.0).0.did.krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + (self.0).0.did.krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { (self.0).0.did.default_span(tcx) @@ -212,8 +232,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for (LocalDefId, DefId, SubstsRef<'tcx>) { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -221,8 +242,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for (ty::ParamEnv<'tcx>, ty::PolyTraitRef<'tcx>) { - fn query_crate(&self) -> CrateNum { - self.1.def_id().krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.1.def_id().krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.1.def_id()) @@ -230,8 +252,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for (&'tcx ty::Const<'tcx>, mir::Field) { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -239,8 +262,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for mir::interpret::ConstAlloc<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -248,8 +272,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for ty::PolyTraitRef<'tcx> { - fn query_crate(&self) -> CrateNum { - self.def_id().krate + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.def_id().krate == LOCAL_CRATE } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.def_id()) @@ -257,8 +282,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for GenericArg<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -266,8 +292,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for mir::ConstantKind<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -275,8 +302,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for &'tcx ty::Const<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -284,8 +312,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for Ty<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -293,8 +322,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for &'tcx ty::List> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -302,8 +332,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx> Key for ty::ParamEnv<'tcx> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -311,8 +342,9 @@ fn default_span(&self, _: TyCtxt<'_>) -> Span { } impl<'tcx, T: Key> Key for ty::ParamEnvAnd<'tcx, T> { - fn query_crate(&self) -> CrateNum { - self.value.query_crate() + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + self.value.query_crate_is_local() } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.value.default_span(tcx) @@ -320,8 +352,9 @@ fn default_span(&self, tcx: TyCtxt<'_>) -> Span { } impl Key for Symbol { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -331,8 +364,9 @@ fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { /// Canonical query goals correspond to abstract trait operations that /// are not tied to any crate in particular. impl<'tcx, T> Key for Canonical<'tcx, T> { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { @@ -341,8 +375,9 @@ fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { } impl Key for (Symbol, u32, u32) { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { @@ -351,8 +386,9 @@ fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { } impl<'tcx> Key for (DefId, Ty<'tcx>, SubstsRef<'tcx>, ty::ParamEnv<'tcx>) { - fn query_crate(&self) -> CrateNum { - LOCAL_CRATE + #[inline(always)] + fn query_crate_is_local(&self) -> bool { + true } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { diff --git a/compiler/rustc_query_impl/src/lib.rs b/compiler/rustc_query_impl/src/lib.rs index ac81c0261e2..176f4b3eff8 100644 --- a/compiler/rustc_query_impl/src/lib.rs +++ b/compiler/rustc_query_impl/src/lib.rs @@ -19,7 +19,6 @@ use rustc_data_structures::fingerprint::Fingerprint; use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; use rustc_errors::{DiagnosticBuilder, Handler}; -use rustc_hir::def_id::LOCAL_CRATE; use rustc_middle::dep_graph; use rustc_middle::ich::StableHashingContext; use rustc_middle::ty::query::{query_keys, query_storage, query_stored, query_values}; diff --git a/compiler/rustc_query_impl/src/plumbing.rs b/compiler/rustc_query_impl/src/plumbing.rs index de1f89b4468..eaf3259d2ef 100644 --- a/compiler/rustc_query_impl/src/plumbing.rs +++ b/compiler/rustc_query_impl/src/plumbing.rs @@ -389,8 +389,7 @@ fn query_cache<'a>(tcx: QueryCtxt<$tcx>) -> &'a QueryCacheStore fn compute_fn(tcx: QueryCtxt<'tcx>, key: &Self::Key) -> fn(TyCtxt<'tcx>, Self::Key) -> Self::Value { - let is_local = key.query_crate() == LOCAL_CRATE; - if is_local { + if key.query_crate_is_local() { tcx.queries.local_providers.$name } else { tcx.queries.extern_providers.$name