1
Fork 0

Rollup merge of #98881 - cjgillot:q-def-kind, r=fee1-dead

Only compute DefKind through the query.
This commit is contained in:
Dylan DPC 2022-07-06 14:49:08 +05:30 committed by GitHub
commit 707c0d9a2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 7 deletions

View file

@ -225,7 +225,8 @@ impl<'hir> Map<'hir> {
self.tcx.definitions_untracked().iter_local_def_id() self.tcx.definitions_untracked().iter_local_def_id()
} }
pub fn opt_def_kind(self, local_def_id: LocalDefId) -> Option<DefKind> { /// Do not call this function directly. The query should be called.
pub(super) fn opt_def_kind(self, local_def_id: LocalDefId) -> Option<DefKind> {
let hir_id = self.local_def_id_to_hir_id(local_def_id); let hir_id = self.local_def_id_to_hir_id(local_def_id);
let def_kind = match self.find(hir_id)? { let def_kind = match self.find(hir_id)? {
Node::Item(item) => match item.kind { Node::Item(item) => match item.kind {

View file

@ -467,7 +467,7 @@ impl<'tcx> EmbargoVisitor<'tcx> {
} }
let macro_module_def_id = self.tcx.local_parent(local_def_id); let macro_module_def_id = self.tcx.local_parent(local_def_id);
if self.tcx.hir().opt_def_kind(macro_module_def_id) != Some(DefKind::Mod) { if self.tcx.opt_def_kind(macro_module_def_id) != Some(DefKind::Mod) {
// The macro's parent doesn't correspond to a `mod`, return early (#63164, #65252). // The macro's parent doesn't correspond to a `mod`, return early (#63164, #65252).
return; return;
} }

View file

@ -282,11 +282,14 @@ macro_rules! define_queries {
} else { } else {
Some(key.default_span(*tcx)) Some(key.default_span(*tcx))
}; };
// Use `tcx.hir().opt_def_kind()` to reduce the chance of let def_kind = if kind == dep_graph::DepKind::opt_def_kind {
// accidentally triggering an infinite query loop. // Try to avoid infinite recursion.
let def_kind = key.key_as_def_id() None
} else {
key.key_as_def_id()
.and_then(|def_id| def_id.as_local()) .and_then(|def_id| def_id.as_local())
.and_then(|def_id| tcx.hir().opt_def_kind(def_id)); .and_then(|def_id| tcx.opt_def_kind(def_id))
};
let hash = || { let hash = || {
let mut hcx = tcx.create_stable_hashing_context(); let mut hcx = tcx.create_stable_hashing_context();
let mut hasher = StableHasher::new(); let mut hasher = StableHasher::new();