From e6098df4d0480d0c69bdffba82082df0f220b1a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= Date: Sat, 14 Mar 2026 15:21:13 +0100 Subject: [PATCH] Remove `TaggedQueryKey::def_kind` --- compiler/rustc_middle/src/query/plumbing.rs | 24 --------------------- compiler/rustc_query_impl/src/job.rs | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/compiler/rustc_middle/src/query/plumbing.rs b/compiler/rustc_middle/src/query/plumbing.rs index ef6259b1a0c1a..9f9373ba36dc2 100644 --- a/compiler/rustc_middle/src/query/plumbing.rs +++ b/compiler/rustc_middle/src/query/plumbing.rs @@ -448,30 +448,6 @@ macro_rules! define_callbacks { )* } } - - pub fn def_kind(&self, tcx: TyCtxt<'tcx>) -> Option { - // This is used to reduce code generation as it - // can be reused for queries with the same key type. - fn inner<'tcx>(key: &impl $crate::query::QueryKey, tcx: TyCtxt<'tcx>) - -> Option - { - key - .key_as_def_id() - .and_then(|def_id| def_id.as_local()) - .map(|def_id| tcx.def_kind(def_id)) - } - - if let TaggedQueryKey::def_kind(..) = self { - // Try to avoid infinite recursion. - return None - } - - match self { - $( - TaggedQueryKey::$name(key) => inner(key, tcx), - )* - } - } } /// Holds a `QueryVTable` for each query. diff --git a/compiler/rustc_query_impl/src/job.rs b/compiler/rustc_query_impl/src/job.rs index a27a6f4ea322e..ef3122bac5b25 100644 --- a/compiler/rustc_query_impl/src/job.rs +++ b/compiler/rustc_query_impl/src/job.rs @@ -481,13 +481,23 @@ pub(crate) fn create_cycle_error<'tcx>( usage: usage.tagged_key.description(tcx), }); - let alias = if frames - .iter() - .all(|frame| frame.tagged_key.def_kind(tcx) == Some(DefKind::TyAlias)) - { + let is_all_def_kind = |def_kind| { + // Trivial type alias and trait alias cycles consists of `type_of` and + // `explicit_implied_predicates_of` queries, so we just check just these here. + frames.iter().all(|frame| match frame.tagged_key { + TaggedQueryKey::type_of(def_id) + | TaggedQueryKey::explicit_implied_predicates_of(def_id) + if tcx.def_kind(def_id) == def_kind => + { + true + } + _ => false, + }) + }; + + let alias = if is_all_def_kind(DefKind::TyAlias) { Some(crate::error::Alias::Ty) - } else if frames.iter().all(|frame| frame.tagged_key.def_kind(tcx) == Some(DefKind::TraitAlias)) - { + } else if is_all_def_kind(DefKind::TraitAlias) { Some(crate::error::Alias::Trait) } else { None