mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-13 02:17:41 +00:00
Rollup merge of #93098 - Aaron1011:def-path-hash-debug, r=oli-obk
Show a more informative panic message when `DefPathHash` does not exist This should hopefully make it easier to debug incremental compilation bugs like #93096 without affecting performance.
This commit is contained in:
commit
e901b24310
@ -449,13 +449,17 @@ impl Definitions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn local_def_path_hash_to_def_id(&self, hash: DefPathHash) -> LocalDefId {
|
pub fn local_def_path_hash_to_def_id(
|
||||||
|
&self,
|
||||||
|
hash: DefPathHash,
|
||||||
|
err: &mut dyn FnMut() -> !,
|
||||||
|
) -> LocalDefId {
|
||||||
debug_assert!(hash.stable_crate_id() == self.stable_crate_id);
|
debug_assert!(hash.stable_crate_id() == self.stable_crate_id);
|
||||||
self.table
|
self.table
|
||||||
.def_path_hash_to_index
|
.def_path_hash_to_index
|
||||||
.get(&hash)
|
.get(&hash)
|
||||||
.map(|local_def_index| LocalDefId { local_def_index })
|
.map(|local_def_index| LocalDefId { local_def_index })
|
||||||
.unwrap()
|
.unwrap_or_else(|| err())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn def_path_hash_to_def_index_map(&self) -> &DefPathHashMap {
|
pub fn def_path_hash_to_def_index_map(&self) -> &DefPathHashMap {
|
||||||
|
@ -266,7 +266,9 @@ impl DepNodeExt for DepNode {
|
|||||||
/// has been removed.
|
/// has been removed.
|
||||||
fn extract_def_id<'tcx>(&self, tcx: TyCtxt<'tcx>) -> Option<DefId> {
|
fn extract_def_id<'tcx>(&self, tcx: TyCtxt<'tcx>) -> Option<DefId> {
|
||||||
if self.kind.fingerprint_style(tcx) == FingerprintStyle::DefPathHash {
|
if self.kind.fingerprint_style(tcx) == FingerprintStyle::DefPathHash {
|
||||||
Some(tcx.def_path_hash_to_def_id(DefPathHash(self.hash.into())))
|
Some(tcx.def_path_hash_to_def_id(DefPathHash(self.hash.into()), &mut || {
|
||||||
|
panic!("Failed to extract DefId: {:?} {}", self.kind, self.hash)
|
||||||
|
}))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
@ -1308,7 +1308,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||||||
/// Converts a `DefPathHash` to its corresponding `DefId` in the current compilation
|
/// Converts a `DefPathHash` to its corresponding `DefId` in the current compilation
|
||||||
/// session, if it still exists. This is used during incremental compilation to
|
/// session, if it still exists. This is used during incremental compilation to
|
||||||
/// turn a deserialized `DefPathHash` into its current `DefId`.
|
/// turn a deserialized `DefPathHash` into its current `DefId`.
|
||||||
pub fn def_path_hash_to_def_id(self, hash: DefPathHash) -> DefId {
|
pub fn def_path_hash_to_def_id(self, hash: DefPathHash, err: &mut dyn FnMut() -> !) -> DefId {
|
||||||
debug!("def_path_hash_to_def_id({:?})", hash);
|
debug!("def_path_hash_to_def_id({:?})", hash);
|
||||||
|
|
||||||
let stable_crate_id = hash.stable_crate_id();
|
let stable_crate_id = hash.stable_crate_id();
|
||||||
@ -1316,7 +1316,10 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||||||
// If this is a DefPathHash from the local crate, we can look up the
|
// If this is a DefPathHash from the local crate, we can look up the
|
||||||
// DefId in the tcx's `Definitions`.
|
// DefId in the tcx's `Definitions`.
|
||||||
if stable_crate_id == self.sess.local_stable_crate_id() {
|
if stable_crate_id == self.sess.local_stable_crate_id() {
|
||||||
self.untracked_resolutions.definitions.local_def_path_hash_to_def_id(hash).to_def_id()
|
self.untracked_resolutions
|
||||||
|
.definitions
|
||||||
|
.local_def_path_hash_to_def_id(hash, err)
|
||||||
|
.to_def_id()
|
||||||
} else {
|
} else {
|
||||||
// If this is a DefPathHash from an upstream crate, let the CrateStore map
|
// If this is a DefPathHash from an upstream crate, let the CrateStore map
|
||||||
// it to a DefId.
|
// it to a DefId.
|
||||||
|
@ -761,7 +761,9 @@ impl<'a, 'tcx> Decodable<CacheDecoder<'a, 'tcx>> for DefId {
|
|||||||
// If we get to this point, then all of the query inputs were green,
|
// If we get to this point, then all of the query inputs were green,
|
||||||
// which means that the definition with this hash is guaranteed to
|
// which means that the definition with this hash is guaranteed to
|
||||||
// still exist in the current compilation session.
|
// still exist in the current compilation session.
|
||||||
Ok(d.tcx().def_path_hash_to_def_id(def_path_hash))
|
Ok(d.tcx().def_path_hash_to_def_id(def_path_hash, &mut || {
|
||||||
|
panic!("Failed to convert DefPathHash {:?}", def_path_hash)
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user