Skip to content

Commit 15cbb8f

Browse files
Fill some holes in SVH/ICH computation, making it more strict.
1 parent a6db623 commit 15cbb8f

File tree

3 files changed

+291
-66
lines changed

3 files changed

+291
-66
lines changed

src/librustc_incremental/calculate_svh/mod.rs

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@
2828
//! at the beginning.
2929
3030
use syntax::ast;
31-
use syntax::attr::AttributeMethods;
3231
use std::hash::{Hash, SipHasher, Hasher};
3332
use rustc::dep_graph::DepNode;
3433
use rustc::hir;
3534
use rustc::hir::def_id::{CRATE_DEF_INDEX, DefId};
3635
use rustc::hir::intravisit as visit;
3736
use rustc::ty::TyCtxt;
3837
use rustc_data_structures::fnv::FnvHashMap;
38+
use rustc::util::common::record_time;
39+
use rustc::session::config::DebugInfoLevel::NoDebugInfo;
3940

4041
use self::def_path_hash::DefPathHashes;
4142
use self::svh_visitor::StrictVersionHashVisitor;
@@ -49,19 +50,27 @@ pub fn compute_incremental_hashes_map<'a, 'tcx: 'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>)
4950
-> IncrementalHashesMap {
5051
let _ignore = tcx.dep_graph.in_ignore();
5152
let krate = tcx.map.krate();
52-
let mut visitor = HashItemsVisitor { tcx: tcx,
53-
hashes: FnvHashMap(),
54-
def_path_hashes: DefPathHashes::new(tcx) };
55-
visitor.calculate_def_id(DefId::local(CRATE_DEF_INDEX), |v| visit::walk_crate(v, krate));
56-
krate.visit_all_items(&mut visitor);
57-
visitor.compute_crate_hash();
53+
let hash_spans = tcx.sess.opts.debuginfo != NoDebugInfo;
54+
let mut visitor = HashItemsVisitor {
55+
tcx: tcx,
56+
hashes: FnvHashMap(),
57+
def_path_hashes: DefPathHashes::new(tcx),
58+
hash_spans: hash_spans
59+
};
60+
record_time(&tcx.sess.perf_stats.incr_comp_hashes_time, || {
61+
visitor.calculate_def_id(DefId::local(CRATE_DEF_INDEX),
62+
|v| visit::walk_crate(v, krate));
63+
krate.visit_all_items(&mut visitor);
64+
});
65+
record_time(&tcx.sess.perf_stats.svh_time, || visitor.compute_crate_hash());
5866
visitor.hashes
5967
}
6068

6169
struct HashItemsVisitor<'a, 'tcx: 'a> {
6270
tcx: TyCtxt<'a, 'tcx, 'tcx>,
6371
def_path_hashes: DefPathHashes<'a, 'tcx>,
6472
hashes: IncrementalHashesMap,
73+
hash_spans: bool,
6574
}
6675

6776
impl<'a, 'tcx> HashItemsVisitor<'a, 'tcx> {
@@ -82,7 +91,8 @@ impl<'a, 'tcx> HashItemsVisitor<'a, 'tcx> {
8291
let mut state = SipHasher::new();
8392
walk_op(&mut StrictVersionHashVisitor::new(&mut state,
8493
self.tcx,
85-
&mut self.def_path_hashes));
94+
&mut self.def_path_hashes,
95+
self.hash_spans));
8696
let item_hash = state.finish();
8797
self.hashes.insert(DepNode::Hir(def_id), item_hash);
8898
debug!("calculate_item_hash: def_id={:?} hash={:?}", def_id, item_hash);
@@ -118,9 +128,12 @@ impl<'a, 'tcx> HashItemsVisitor<'a, 'tcx> {
118128
item_hashes.hash(&mut crate_state);
119129
}
120130

121-
for attr in &krate.attrs {
122-
debug!("krate attr {:?}", attr);
123-
attr.meta().hash(&mut crate_state);
131+
{
132+
let mut visitor = StrictVersionHashVisitor::new(&mut crate_state,
133+
self.tcx,
134+
&mut self.def_path_hashes,
135+
self.hash_spans);
136+
visitor.hash_attributes(&krate.attrs);
124137
}
125138

126139
let crate_hash = crate_state.finish();

0 commit comments

Comments
 (0)