Avoid hashing when creating a DepNode from a HirId
Instead, combine the already-present DefPathHash with the 32-bit ItemLocalIndex. Should fix #44323.
This commit is contained in:
parent
2f1ef9ef11
commit
d14ed92f6b
1 changed files with 20 additions and 1 deletions
|
@ -62,7 +62,7 @@
|
||||||
|
|
||||||
use hir::def_id::{CrateNum, DefId};
|
use hir::def_id::{CrateNum, DefId};
|
||||||
use hir::map::DefPathHash;
|
use hir::map::DefPathHash;
|
||||||
use hir::HirId;
|
use hir::{HirId, ItemLocalId};
|
||||||
|
|
||||||
use ich::Fingerprint;
|
use ich::Fingerprint;
|
||||||
use ty::{TyCtxt, Instance, InstanceDef};
|
use ty::{TyCtxt, Instance, InstanceDef};
|
||||||
|
@ -638,6 +638,25 @@ impl<'a, 'gcx: 'tcx + 'a, 'tcx: 'a> DepNodeParams<'a, 'gcx, 'tcx> for (DefIdList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a, 'gcx: 'tcx + 'a, 'tcx: 'a> DepNodeParams<'a, 'gcx, 'tcx> for (HirId,) {
|
||||||
|
const CAN_RECONSTRUCT_QUERY_KEY: bool = false;
|
||||||
|
|
||||||
|
// We actually would not need to specialize the implementation of this
|
||||||
|
// method but it's faster to combine the hashes than to instantiate a full
|
||||||
|
// hashing context and stable-hashing state.
|
||||||
|
fn to_fingerprint(&self, tcx: TyCtxt) -> Fingerprint {
|
||||||
|
let (HirId {
|
||||||
|
owner,
|
||||||
|
local_id: ItemLocalId(local_id),
|
||||||
|
},) = *self;
|
||||||
|
|
||||||
|
let def_path_hash = tcx.def_path_hash(DefId::local(owner));
|
||||||
|
let local_id = Fingerprint::from_smaller_hash(local_id as u64);
|
||||||
|
|
||||||
|
def_path_hash.0.combine(local_id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A "work product" corresponds to a `.o` (or other) file that we
|
/// A "work product" corresponds to a `.o` (or other) file that we
|
||||||
/// save in between runs. These ids do not have a DefId but rather
|
/// save in between runs. These ids do not have a DefId but rather
|
||||||
/// some independent path or string that persists between runs without
|
/// some independent path or string that persists between runs without
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue