From: Mark Rousskov Date: Wed, 16 Feb 2022 23:06:50 +0000 (-0500) Subject: Remove SimpleDefKind X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=ddda851fd542775d936eb7fe7e684bb6f2b4bbde;p=rust.git Remove SimpleDefKind --- diff --git a/compiler/rustc_query_impl/src/lib.rs b/compiler/rustc_query_impl/src/lib.rs index 55e95e1a592..832540a85e7 100644 --- a/compiler/rustc_query_impl/src/lib.rs +++ b/compiler/rustc_query_impl/src/lib.rs @@ -44,8 +44,6 @@ mod profiling_support; pub use self::profiling_support::alloc_self_profile_query_strings; -mod util; - fn describe_as_module(def_id: LocalDefId, tcx: TyCtxt<'_>) -> String { if def_id.is_top_level_module() { "top-level module".to_string() diff --git a/compiler/rustc_query_impl/src/plumbing.rs b/compiler/rustc_query_impl/src/plumbing.rs index ff9d32a6776..f9668a76723 100644 --- a/compiler/rustc_query_impl/src/plumbing.rs +++ b/compiler/rustc_query_impl/src/plumbing.rs @@ -289,13 +289,11 @@ pub fn $name<$tcx>(tcx: QueryCtxt<$tcx>, key: query_keys::$name<$tcx>) -> QueryS } else { Some(key.default_span(*tcx)) }; - let def_id = key.key_as_def_id(); - let def_kind = def_id + // Use `tcx.hir().opt_def_kind()` to reduce the chance of + // accidentally triggering an infinite query loop. + let def_kind = key.key_as_def_id() .and_then(|def_id| def_id.as_local()) - // Use `tcx.hir().opt_def_kind()` to reduce the chance of - // accidentally triggering an infinite query loop. - .and_then(|def_id| tcx.hir().opt_def_kind(def_id)) - .map(|def_kind| $crate::util::def_kind_to_simple_def_kind(def_kind)); + .and_then(|def_id| tcx.hir().opt_def_kind(def_id)); let hash = || { let mut hcx = tcx.create_stable_hashing_context(); let mut hasher = StableHasher::new(); diff --git a/compiler/rustc_query_impl/src/util.rs b/compiler/rustc_query_impl/src/util.rs deleted file mode 100644 index 517c107b5d9..00000000000 --- a/compiler/rustc_query_impl/src/util.rs +++ /dev/null @@ -1,18 +0,0 @@ -use rustc_hir::def::DefKind; -use rustc_query_system::query::SimpleDefKind; - -/// Convert a [`DefKind`] to a [`SimpleDefKind`]. -/// -/// *See [`SimpleDefKind`]'s docs for more information.* -pub(crate) fn def_kind_to_simple_def_kind(def_kind: DefKind) -> SimpleDefKind { - match def_kind { - DefKind::Struct => SimpleDefKind::Struct, - DefKind::Enum => SimpleDefKind::Enum, - DefKind::Union => SimpleDefKind::Union, - DefKind::Trait => SimpleDefKind::Trait, - DefKind::TyAlias => SimpleDefKind::TyAlias, - DefKind::TraitAlias => SimpleDefKind::TraitAlias, - - _ => SimpleDefKind::Other, - } -} diff --git a/compiler/rustc_query_system/src/query/job.rs b/compiler/rustc_query_system/src/query/job.rs index adf878a7f04..4588403925e 100644 --- a/compiler/rustc_query_system/src/query/job.rs +++ b/compiler/rustc_query_system/src/query/job.rs @@ -1,6 +1,7 @@ use crate::dep_graph::DepContext; use crate::query::plumbing::CycleError; -use crate::query::{QueryContext, QueryStackFrame, SimpleDefKind}; +use crate::query::{QueryContext, QueryStackFrame}; +use rustc_hir::def::DefKind; use rustc_data_structures::fx::FxHashMap; use rustc_errors::{struct_span_err, Diagnostic, DiagnosticBuilder, Handler, Level}; @@ -556,15 +557,13 @@ pub(crate) fn report_cycle<'a>( } if stack.iter().all(|entry| { - entry.query.def_kind.map_or(false, |def_kind| { - matches!(def_kind, SimpleDefKind::TyAlias | SimpleDefKind::TraitAlias) - }) + entry + .query + .def_kind + .map_or(false, |def_kind| matches!(def_kind, DefKind::TyAlias | DefKind::TraitAlias)) }) { if stack.iter().all(|entry| { - entry - .query - .def_kind - .map_or(false, |def_kind| matches!(def_kind, SimpleDefKind::TyAlias)) + entry.query.def_kind.map_or(false, |def_kind| matches!(def_kind, DefKind::TyAlias)) }) { err.note("type aliases cannot be recursive"); err.help("consider using a struct, enum, or union instead to break the cycle"); diff --git a/compiler/rustc_query_system/src/query/mod.rs b/compiler/rustc_query_system/src/query/mod.rs index 361ae3c4352..de64ebb6203 100644 --- a/compiler/rustc_query_system/src/query/mod.rs +++ b/compiler/rustc_query_system/src/query/mod.rs @@ -19,6 +19,7 @@ use rustc_data_structures::sync::Lock; use rustc_data_structures::thin_vec::ThinVec; use rustc_errors::Diagnostic; +use rustc_hir::def::DefKind; use rustc_span::Span; /// Description of a frame in the query stack. @@ -29,46 +30,20 @@ pub struct QueryStackFrame { pub name: &'static str, pub description: String, span: Option, - /// The `DefKind` this query frame is associated with, if applicable. - /// - /// We can't use `rustc_hir::def::DefKind` because `rustc_hir` is not - /// available in `rustc_query_system`. Instead, we have a simplified - /// custom version of it, called [`SimpleDefKind`]. - def_kind: Option, + def_kind: Option, /// This hash is used to deterministically pick /// a query to remove cycles in the parallel compiler. #[cfg(parallel_compiler)] hash: u64, } -/// A simplified version of `rustc_hir::def::DefKind`. -/// -/// It was added to help improve cycle errors caused by recursive type aliases. -/// As of August 2021, `rustc_query_system` cannot depend on `rustc_hir` -/// because it would create a dependency cycle. So, instead, a simplified -/// version of `DefKind` was added to `rustc_query_system`. -/// -/// `DefKind`s are converted to `SimpleDefKind`s in `rustc_query_impl`. -#[derive(Debug, Copy, Clone)] -pub enum SimpleDefKind { - Struct, - Enum, - Union, - Trait, - TyAlias, - TraitAlias, - - // FIXME: add more from `rustc_hir::def::DefKind` and then remove `Other` - Other, -} - impl QueryStackFrame { #[inline] pub fn new( name: &'static str, description: String, span: Option, - def_kind: Option, + def_kind: Option, _hash: impl FnOnce() -> u64, ) -> Self { Self {