mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
Retrieve DefKind
from HIR map to reduce chance of cycles
`tcx.def_kind()` could theoretically invoke another query, which could cause an infinite query loop. Accessing the HIR map directly makes that less likely to happen. I also changed it to use `as_local()` (`tcx.def_kind()` seems to implicitly call `expect_local()`) and `opt_def_kind()` to reduce the chance of panicking on valid code.
This commit is contained in:
parent
c3df832824
commit
d96234bed7
@ -338,10 +338,12 @@ macro_rules! define_queries {
|
||||
Some(key.default_span(*tcx))
|
||||
};
|
||||
let def_id = key.key_as_def_id();
|
||||
let def_kind = def_id.map(|def_id| {
|
||||
let def_kind = tcx.def_kind(def_id);
|
||||
$crate::util::def_kind_to_simple_def_kind(def_kind)
|
||||
});
|
||||
let def_kind = 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));
|
||||
let hash = || {
|
||||
let mut hcx = tcx.create_stable_hashing_context();
|
||||
let mut hasher = StableHasher::new();
|
||||
|
Loading…
Reference in New Issue
Block a user