mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-04 19:29:07 +00:00
incr.comp.: Properly incorporate symbol linkage and visibility into CGU hash.
This commit is contained in:
parent
0b5c0874b8
commit
b2c3a413b9
@ -1172,7 +1172,7 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
|||||||
|
|
||||||
let cgu_name = String::from(cgu.name());
|
let cgu_name = String::from(cgu.name());
|
||||||
let cgu_id = cgu.work_product_id();
|
let cgu_id = cgu.work_product_id();
|
||||||
let symbol_name_hash = cgu.compute_symbol_name_hash(scx, &exported_symbols);
|
let symbol_name_hash = cgu.compute_symbol_name_hash(scx);
|
||||||
|
|
||||||
// Check whether there is a previous work-product we can
|
// Check whether there is a previous work-product we can
|
||||||
// re-use. Not only must the file exist, and the inputs not
|
// re-use. Not only must the file exist, and the inputs not
|
||||||
|
@ -174,29 +174,16 @@ impl<'tcx> CodegenUnit<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn compute_symbol_name_hash<'a>(&self,
|
pub fn compute_symbol_name_hash<'a>(&self,
|
||||||
scx: &SharedCrateContext<'a, 'tcx>,
|
scx: &SharedCrateContext<'a, 'tcx>)
|
||||||
exported_symbols: &ExportedSymbols)
|
|
||||||
-> u64 {
|
-> u64 {
|
||||||
let mut state = IchHasher::new();
|
let mut state = IchHasher::new();
|
||||||
let exported_symbols = exported_symbols.local_exports();
|
|
||||||
let all_items = self.items_in_deterministic_order(scx.tcx());
|
let all_items = self.items_in_deterministic_order(scx.tcx());
|
||||||
for (item, _) in all_items {
|
for (item, (linkage, visibility)) in all_items {
|
||||||
let symbol_name = item.symbol_name(scx.tcx());
|
let symbol_name = item.symbol_name(scx.tcx());
|
||||||
symbol_name.len().hash(&mut state);
|
symbol_name.len().hash(&mut state);
|
||||||
symbol_name.hash(&mut state);
|
symbol_name.hash(&mut state);
|
||||||
let exported = match item {
|
linkage.hash(&mut state);
|
||||||
TransItem::Fn(ref instance) => {
|
visibility.hash(&mut state);
|
||||||
let node_id =
|
|
||||||
scx.tcx().hir.as_local_node_id(instance.def_id());
|
|
||||||
node_id.map(|node_id| exported_symbols.contains(&node_id))
|
|
||||||
.unwrap_or(false)
|
|
||||||
}
|
|
||||||
TransItem::Static(node_id) => {
|
|
||||||
exported_symbols.contains(&node_id)
|
|
||||||
}
|
|
||||||
TransItem::GlobalAsm(..) => true,
|
|
||||||
};
|
|
||||||
exported.hash(&mut state);
|
|
||||||
}
|
}
|
||||||
state.finish().to_smaller_hash()
|
state.finish().to_smaller_hash()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user