about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Woerister <michaelwoerister@posteo.net>2017-01-24 11:03:37 -0500
committerMichael Woerister <michaelwoerister@posteo.net>2017-01-24 17:56:29 -0500
commit197f037652bffe7e62be4c7f861c247946549619 (patch)
tree561b3fd7e5c3400861f7c6469a33c5c4329e1de4
parentd2d8ae6575281e92a58899fb8f8c51fc8f84de04 (diff)
downloadrust-197f037652bffe7e62be4c7f861c247946549619.tar.gz
rust-197f037652bffe7e62be4c7f861c247946549619.zip
incr.comp.: Make cross-crate tracking for incr. comp. opt-in.
-rw-r--r--src/librustc/session/config.rs2
-rw-r--r--src/librustc_incremental/persist/preds.rs8
-rw-r--r--src/librustc_incremental/persist/save.rs26
-rw-r--r--src/test/incremental/add_private_fn_at_krate_root_cc/auxiliary/point.rs2
-rw-r--r--src/test/incremental/callee_caller_cross_crate/auxiliary/a.rs2
-rw-r--r--src/test/incremental/change_private_fn_cc/auxiliary/point.rs2
-rw-r--r--src/test/incremental/change_private_impl_method_cc/auxiliary/point.rs2
-rw-r--r--src/test/incremental/remove-private-item-cross-crate/auxiliary/a.rs2
-rw-r--r--src/test/incremental/rlib_cross_crate/auxiliary/a.rs1
-rw-r--r--src/test/incremental/struct_change_field_type_cross_crate/auxiliary/a.rs2
-rw-r--r--src/test/incremental/type_alias_cross_crate/auxiliary/a.rs2
11 files changed, 38 insertions, 13 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 7d8f7fcefe6..7419d74287b 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -899,6 +899,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
           "attempt to recover from parse errors (experimental)"),
     incremental: Option<String> = (None, parse_opt_string, [UNTRACKED],
           "enable incremental compilation (experimental)"),
+    incremental_cc: bool = (false, parse_bool, [UNTRACKED],
+          "enable cross-crate incremental compilation (even more experimental)"),
     incremental_info: bool = (false, parse_bool, [UNTRACKED],
         "print high-level information about incremental reuse (or the lack thereof)"),
     incremental_dump_hash: bool = (false, parse_bool, [UNTRACKED],
diff --git a/src/librustc_incremental/persist/preds.rs b/src/librustc_incremental/persist/preds.rs
index b2a4a2772ec..327927b2f77 100644
--- a/src/librustc_incremental/persist/preds.rs
+++ b/src/librustc_incremental/persist/preds.rs
@@ -33,8 +33,12 @@ pub struct Predecessors<'query> {
 
 impl<'q> Predecessors<'q> {
     pub fn new(query: &'q DepGraphQuery<DefId>, hcx: &mut HashContext) -> Self {
-        // Find nodes for which we want to know the full set of preds
         let tcx = hcx.tcx;
+
+        let collect_for_metadata = tcx.sess.opts.debugging_opts.incremental_cc ||
+                                   tcx.sess.opts.debugging_opts.query_dep_graph;
+
+        // Find nodes for which we want to know the full set of preds
         let node_count = query.graph.len_nodes();
 
         // Set up some data structures the cache predecessor search needs:
@@ -52,7 +56,7 @@ impl<'q> Predecessors<'q> {
             .enumerate()
             .filter(|&(_, node)| match node.data {
                 DepNode::WorkProduct(_) => true,
-                DepNode::MetaData(ref def_id) => def_id.is_local(),
+                DepNode::MetaData(ref def_id) => collect_for_metadata && def_id.is_local(),
 
                 // if -Z query-dep-graph is passed, save more extended data
                 // to enable better unit testing
diff --git a/src/librustc_incremental/persist/save.rs b/src/librustc_incremental/persist/save.rs
index 356eb845fed..f626905f27d 100644
--- a/src/librustc_incremental/persist/save.rs
+++ b/src/librustc_incremental/persist/save.rs
@@ -55,17 +55,21 @@ pub fn save_dep_graph<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
     let preds = Predecessors::new(&query, &mut hcx);
     let mut current_metadata_hashes = FxHashMap();
 
-    // IMPORTANT: We are saving the metadata hashes *before* the dep-graph,
-    //            since metadata-encoding might add new entries to the
-    //            DefIdDirectory (which is saved in the dep-graph file).
-    save_in(sess,
-            metadata_hash_export_path(sess),
-            |e| encode_metadata_hashes(tcx,
-                                       svh,
-                                       &preds,
-                                       &mut builder,
-                                       &mut current_metadata_hashes,
-                                       e));
+    if sess.opts.debugging_opts.incremental_cc ||
+       sess.opts.debugging_opts.query_dep_graph {
+        // IMPORTANT: We are saving the metadata hashes *before* the dep-graph,
+        //            since metadata-encoding might add new entries to the
+        //            DefIdDirectory (which is saved in the dep-graph file).
+        save_in(sess,
+                metadata_hash_export_path(sess),
+                |e| encode_metadata_hashes(tcx,
+                                           svh,
+                                           &preds,
+                                           &mut builder,
+                                           &mut current_metadata_hashes,
+                                           e));
+    }
+
     save_in(sess,
             dep_graph_path(sess),
             |e| encode_dep_graph(&preds, &mut builder, e));
diff --git a/src/test/incremental/add_private_fn_at_krate_root_cc/auxiliary/point.rs b/src/test/incremental/add_private_fn_at_krate_root_cc/auxiliary/point.rs
index adc2b23441e..1064c97b744 100644
--- a/src/test/incremental/add_private_fn_at_krate_root_cc/auxiliary/point.rs
+++ b/src/test/incremental/add_private_fn_at_krate_root_cc/auxiliary/point.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
+
 pub struct Point {
     pub x: f32,
     pub y: f32,
diff --git a/src/test/incremental/callee_caller_cross_crate/auxiliary/a.rs b/src/test/incremental/callee_caller_cross_crate/auxiliary/a.rs
index d802c9a8352..a02b71a753c 100644
--- a/src/test/incremental/callee_caller_cross_crate/auxiliary/a.rs
+++ b/src/test/incremental/callee_caller_cross_crate/auxiliary/a.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
+
 #![crate_type="rlib"]
 
 #[cfg(rpass1)]
diff --git a/src/test/incremental/change_private_fn_cc/auxiliary/point.rs b/src/test/incremental/change_private_fn_cc/auxiliary/point.rs
index dcc1ced635f..08eef2a73f6 100644
--- a/src/test/incremental/change_private_fn_cc/auxiliary/point.rs
+++ b/src/test/incremental/change_private_fn_cc/auxiliary/point.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
+
 pub struct Point {
     pub x: f32,
     pub y: f32,
diff --git a/src/test/incremental/change_private_impl_method_cc/auxiliary/point.rs b/src/test/incremental/change_private_impl_method_cc/auxiliary/point.rs
index 8df1cf54da2..e69dc51119e 100644
--- a/src/test/incremental/change_private_impl_method_cc/auxiliary/point.rs
+++ b/src/test/incremental/change_private_impl_method_cc/auxiliary/point.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
+
 pub struct Point {
     pub x: f32,
     pub y: f32,
diff --git a/src/test/incremental/remove-private-item-cross-crate/auxiliary/a.rs b/src/test/incremental/remove-private-item-cross-crate/auxiliary/a.rs
index 4d84e844ded..39547fb7359 100644
--- a/src/test/incremental/remove-private-item-cross-crate/auxiliary/a.rs
+++ b/src/test/incremental/remove-private-item-cross-crate/auxiliary/a.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
+
 #![allow(warnings)]
 #![crate_name = "a"]
 #![crate_type = "rlib"]
diff --git a/src/test/incremental/rlib_cross_crate/auxiliary/a.rs b/src/test/incremental/rlib_cross_crate/auxiliary/a.rs
index ff5fd634714..3ecd9aff3f8 100644
--- a/src/test/incremental/rlib_cross_crate/auxiliary/a.rs
+++ b/src/test/incremental/rlib_cross_crate/auxiliary/a.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
 // no-prefer-dynamic
 
 #![crate_type="rlib"]
diff --git a/src/test/incremental/struct_change_field_type_cross_crate/auxiliary/a.rs b/src/test/incremental/struct_change_field_type_cross_crate/auxiliary/a.rs
index 2ddcaf15721..d14ebf78d82 100644
--- a/src/test/incremental/struct_change_field_type_cross_crate/auxiliary/a.rs
+++ b/src/test/incremental/struct_change_field_type_cross_crate/auxiliary/a.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
+
 #![crate_type="rlib"]
 
  #[cfg(rpass1)]
diff --git a/src/test/incremental/type_alias_cross_crate/auxiliary/a.rs b/src/test/incremental/type_alias_cross_crate/auxiliary/a.rs
index e1dba131770..0393bcda991 100644
--- a/src/test/incremental/type_alias_cross_crate/auxiliary/a.rs
+++ b/src/test/incremental/type_alias_cross_crate/auxiliary/a.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// compile-flags: -Z incremental-cc
+
 #![crate_type="rlib"]
 
 #[cfg(rpass1)]