mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 02:57:37 +00:00
Save dep-tracking hash of commandline arguments in dep-graph file.
.. and use it to purge the incremental compilation cache if necessary.
This commit is contained in:
parent
32414310b7
commit
d3578ab742
@ -158,6 +158,10 @@ impl<'a,'tcx> DefIdDirectoryBuilder<'a,'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn tcx(&self) -> TyCtxt<'a, 'tcx, 'tcx> {
|
||||
self.tcx
|
||||
}
|
||||
|
||||
pub fn add(&mut self, def_id: DefId) -> DefPathIndex {
|
||||
debug!("DefIdDirectoryBuilder: def_id={:?}", def_id);
|
||||
let tcx = self.tcx;
|
||||
|
@ -101,8 +101,25 @@ pub fn decode_dep_graph<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
work_products_data: &[u8])
|
||||
-> Result<(), Error>
|
||||
{
|
||||
// Decode the list of work_products
|
||||
let mut work_product_decoder = Decoder::new(work_products_data, 0);
|
||||
let work_products = try!(<Vec<SerializedWorkProduct>>::decode(&mut work_product_decoder));
|
||||
|
||||
// Deserialize the directory and dep-graph.
|
||||
let mut dep_graph_decoder = Decoder::new(dep_graph_data, 0);
|
||||
let prev_commandline_args_hash = try!(u64::decode(&mut dep_graph_decoder));
|
||||
|
||||
if prev_commandline_args_hash != tcx.sess.opts.dep_tracking_hash() {
|
||||
// We can't reuse the cache, purge it.
|
||||
debug!("decode_dep_graph: differing commandline arg hashes");
|
||||
for swp in work_products {
|
||||
delete_dirty_work_product(tcx, swp);
|
||||
}
|
||||
|
||||
// No need to do any further work
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let directory = try!(DefIdDirectory::decode(&mut dep_graph_decoder));
|
||||
let serialized_dep_graph = try!(SerializedDepGraph::decode(&mut dep_graph_decoder));
|
||||
|
||||
@ -179,8 +196,6 @@ pub fn decode_dep_graph<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
|
||||
// Add in work-products that are still clean, and delete those that are
|
||||
// dirty.
|
||||
let mut work_product_decoder = Decoder::new(work_products_data, 0);
|
||||
let work_products = try!(<Vec<SerializedWorkProduct>>::decode(&mut work_product_decoder));
|
||||
reconcile_work_products(tcx, work_products, &dirty_target_nodes);
|
||||
|
||||
dirty_clean::check_dirty_clean_annotations(tcx, &dirty_raw_source_nodes, &retraced);
|
||||
|
@ -105,6 +105,10 @@ pub fn encode_dep_graph(preds: &Predecessors,
|
||||
builder: &mut DefIdDirectoryBuilder,
|
||||
encoder: &mut Encoder)
|
||||
-> io::Result<()> {
|
||||
// First encode the commandline arguments hash
|
||||
let tcx = builder.tcx();
|
||||
try!(tcx.sess.opts.dep_tracking_hash().encode(encoder));
|
||||
|
||||
// Create a flat list of (Input, WorkProduct) edges for
|
||||
// serialization.
|
||||
let mut edges = vec![];
|
||||
|
30
src/test/incremental/commandline-args.rs
Normal file
30
src/test/incremental/commandline-args.rs
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// Test that changing a tracked commandline argument invalidates
|
||||
// the cache while changing an untracked one doesn't.
|
||||
|
||||
// revisions:rpass1 rpass2 rpass3
|
||||
|
||||
#![feature(rustc_attrs)]
|
||||
|
||||
#![rustc_partition_translated(module="commandline_args", cfg="rpass2")]
|
||||
#![rustc_partition_reused(module="commandline_args", cfg="rpass3")]
|
||||
|
||||
// Between revisions 1 and 2, we are changing the debuginfo-level, which should
|
||||
// invalidate the cache. Between revisions 2 and 3, we are adding `--verbose`
|
||||
// which should have no effect on the cache:
|
||||
//[rpass1] compile-flags: -C debuginfo=0
|
||||
//[rpass2] compile-flags: -C debuginfo=2
|
||||
//[rpass3] compile-flags: -C debuginfo=2 --verbose
|
||||
|
||||
pub fn main() {
|
||||
println!("hello world");
|
||||
}
|
Loading…
Reference in New Issue
Block a user