1
Fork 0

Correct comments about untracked accesses.

This commit is contained in:
Camille GILLOT 2021-05-20 20:17:45 +02:00
parent 071a047dc7
commit 9f6d7e7dad
4 changed files with 23 additions and 21 deletions

View file

@ -9,7 +9,7 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
use rustc_data_structures::svh::Svh;
use rustc_hir::def::{DefKind, Res};
use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, CRATE_DEF_INDEX, LOCAL_CRATE};
use rustc_hir::definitions::{DefKey, DefPath, Definitions};
use rustc_hir::definitions::{DefKey, DefPath, DefPathHash};
use rustc_hir::intravisit;
use rustc_hir::intravisit::Visitor;
use rustc_hir::itemlikevisit::ItemLikeVisitor;
@ -154,14 +154,8 @@ impl<'hir> Map<'hir> {
self.tcx.hir_crate(())
}
#[inline]
pub fn definitions(&self) -> &'hir Definitions {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
&self.tcx.untracked_resolutions.definitions
}
pub fn def_key(&self, def_id: LocalDefId) -> DefKey {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// Accessing the DefKey is ok, since it is part of DefPathHash.
self.tcx.untracked_resolutions.definitions.def_key(def_id)
}
@ -170,10 +164,16 @@ impl<'hir> Map<'hir> {
}
pub fn def_path(&self, def_id: LocalDefId) -> DefPath {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// Accessing the DefPath is ok, since it is part of DefPathHash.
self.tcx.untracked_resolutions.definitions.def_path(def_id)
}
#[inline]
pub fn def_path_hash(self, def_id: LocalDefId) -> DefPathHash {
// Accessing the DefPathHash is ok, it is incr. comp. stable.
self.tcx.untracked_resolutions.definitions.def_path_hash(def_id)
}
#[inline]
pub fn local_def_id(&self, hir_id: HirId) -> LocalDefId {
self.opt_local_def_id(hir_id).unwrap_or_else(|| {
@ -187,18 +187,20 @@ impl<'hir> Map<'hir> {
#[inline]
pub fn opt_local_def_id(&self, hir_id: HirId) -> Option<LocalDefId> {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// FIXME(#85914) is this access safe for incr. comp.?
self.tcx.untracked_resolutions.definitions.opt_hir_id_to_local_def_id(hir_id)
}
#[inline]
pub fn local_def_id_to_hir_id(&self, def_id: LocalDefId) -> HirId {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// FIXME(#85914) is this access safe for incr. comp.?
self.tcx.untracked_resolutions.definitions.local_def_id_to_hir_id(def_id)
}
pub fn iter_local_def_id(&self) -> impl Iterator<Item = LocalDefId> + '_ {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// Create a dependency to the crate to be sure we reexcute this when the amount of
// definitions change.
self.tcx.ensure().hir_crate(());
self.tcx.untracked_resolutions.definitions.iter_local_def_id()
}

View file

@ -1240,9 +1240,9 @@ impl<'tcx> TyCtxt<'tcx> {
}
pub fn def_key(self, id: DefId) -> rustc_hir::definitions::DefKey {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// Accessing the DefKey is ok, since it is part of DefPathHash.
if let Some(id) = id.as_local() {
self.hir().def_key(id)
self.untracked_resolutions.definitions.def_key(id)
} else {
self.untracked_resolutions.cstore.def_key(id)
}
@ -1254,9 +1254,9 @@ impl<'tcx> TyCtxt<'tcx> {
/// Note that if `id` is not local to this crate, the result will
/// be a non-local `DefPath`.
pub fn def_path(self, id: DefId) -> rustc_hir::definitions::DefPath {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// Accessing the DefPath is ok, since it is part of DefPathHash.
if let Some(id) = id.as_local() {
self.hir().def_path(id)
self.untracked_resolutions.definitions.def_path(id)
} else {
self.untracked_resolutions.cstore.def_path(id)
}
@ -1264,7 +1264,7 @@ impl<'tcx> TyCtxt<'tcx> {
#[inline]
pub fn def_path_hash(self, def_id: DefId) -> rustc_hir::definitions::DefPathHash {
// Accessing the definitions is ok, since all its contents are tracked by the query system.
// Accessing the DefPathHash is ok, it is incr. comp. stable.
if let Some(def_id) = def_id.as_local() {
self.untracked_resolutions.definitions.def_path_hash(def_id)
} else {