Skip to content

Commit

Permalink
Auto merge of #94066 - Mark-Simulacrum:factor-out-simple-def-kind, r=…
Browse files Browse the repository at this point in the history
…davidtwco

Remove SimpleDefKind

Now that rustc_query_system depends on rustc_hir, we can just directly make use of the regular DefKind.
  • Loading branch information
bors committed Feb 21, 2022
2 parents 45e2c28 + ddda851 commit 026d8ce
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 62 deletions.
2 changes: 0 additions & 2 deletions compiler/rustc_query_impl/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,6 @@ pub use on_disk_cache::OnDiskCache;
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()
Expand Down
10 changes: 4 additions & 6 deletions compiler/rustc_query_impl/src/plumbing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -290,13 +290,11 @@ macro_rules! define_queries {
} 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();
Expand Down
18 changes: 0 additions & 18 deletions compiler/rustc_query_impl/src/util.rs

This file was deleted.

15 changes: 7 additions & 8 deletions compiler/rustc_query_system/src/query/job.rs
Original file line number Diff line number Diff line change
@@ -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};
Expand Down Expand Up @@ -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");
Expand Down
31 changes: 3 additions & 28 deletions compiler/rustc_query_system/src/query/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use crate::dep_graph::{DepNodeIndex, HasDepContext, SerializedDepNodeIndex};
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.
Expand All @@ -29,46 +30,20 @@ pub struct QueryStackFrame {
pub name: &'static str,
pub description: String,
span: Option<Span>,
/// 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<SimpleDefKind>,
def_kind: Option<DefKind>,
/// 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<Span>,
def_kind: Option<SimpleDefKind>,
def_kind: Option<DefKind>,
_hash: impl FnOnce() -> u64,
) -> Self {
Self {
Expand Down

0 comments on commit 026d8ce

Please sign in to comment.