From fe47ca0d0b04f1cd46195b19cbb42602319aaf98 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 28 Mar 2016 17:43:36 -0400 Subject: [PATCH] restructure rustc options relating to incr. comp. You can now pass `-Z incremental=dir` as well as saying `-Z query-dep-graph` if you want to enable queries for some other purpose. Accessor functions take the place of computed boolean flags. --- src/librustc/session/config.rs | 31 ++++++++++++------- src/librustc_driver/driver.rs | 2 +- .../dep-graph-assoc-type-trans.rs | 2 +- .../compile-fail/dep-graph-caller-callee.rs | 2 +- .../dep-graph-struct-signature.rs | 2 +- ...graph-trait-impl-two-traits-same-method.rs | 2 +- .../dep-graph-trait-impl-two-traits.rs | 2 +- src/test/compile-fail/dep-graph-trait-impl.rs | 2 +- src/test/compile-fail/dep-graph-unrelated.rs | 2 +- src/test/run-make/execution-engine/test.rs | 2 +- 10 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 4d4ba50bd4a..681a6ba8eb4 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -139,11 +139,9 @@ pub struct Options { pub continue_parse_after_error: bool, pub mir_opt_level: usize, - /// if true, build up the dep-graph - pub build_dep_graph: bool, - - /// if true, -Z dump-dep-graph was passed to dump out the dep-graph - pub dump_dep_graph: bool, + /// if Some, enable incremental compilation, using the given + /// directory to store intermediate results + pub incremental: Option, pub no_analysis: bool, pub debugging_opts: DebuggingOptions, @@ -260,8 +258,7 @@ pub fn basic_options() -> Options { treat_err_as_bug: false, continue_parse_after_error: false, mir_opt_level: 1, - build_dep_graph: false, - dump_dep_graph: false, + incremental: None, no_analysis: false, debugging_opts: basic_debugging_options(), prints: Vec::new(), @@ -276,6 +273,15 @@ pub fn basic_options() -> Options { } } +impl Options { + /// True if there is a reason to build the dep graph. + pub fn build_dep_graph(&self) -> bool { + self.incremental.is_some() || + self.debugging_opts.dump_dep_graph || + self.debugging_opts.query_dep_graph + } +} + // The type of entry function, so // users can have their own entry // functions that don't start a @@ -635,10 +641,12 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, "treat all errors that occur as bugs"), continue_parse_after_error: bool = (false, parse_bool, "attempt to recover from parse errors (experimental)"), - incr_comp: bool = (false, parse_bool, + incremental: Option = (None, parse_opt_string, "enable incremental compilation (experimental)"), dump_dep_graph: bool = (false, parse_bool, "dump the dependency graph to $RUST_DEP_GRAPH (default: /tmp/dep_graph.gv)"), + query_dep_graph: bool = (false, parse_bool, + "enable queries of the dependency graph for regression testing"), no_analysis: bool = (false, parse_bool, "parse and expand the source, but run no analysis"), extra_plugins: Vec = (Vec::new(), parse_list, @@ -1051,8 +1059,6 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options { let treat_err_as_bug = debugging_opts.treat_err_as_bug; let continue_parse_after_error = debugging_opts.continue_parse_after_error; let mir_opt_level = debugging_opts.mir_opt_level.unwrap_or(1); - let incremental_compilation = debugging_opts.incr_comp; - let dump_dep_graph = debugging_opts.dump_dep_graph; let no_analysis = debugging_opts.no_analysis; let mut output_types = HashMap::new(); @@ -1212,6 +1218,8 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options { let crate_name = matches.opt_str("crate-name"); + let incremental = debugging_opts.incremental.as_ref().map(|m| PathBuf::from(m)); + Options { crate_types: crate_types, gc: gc, @@ -1231,8 +1239,7 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options { treat_err_as_bug: treat_err_as_bug, continue_parse_after_error: continue_parse_after_error, mir_opt_level: mir_opt_level, - build_dep_graph: incremental_compilation || dump_dep_graph, - dump_dep_graph: dump_dep_graph, + incremental: incremental, no_analysis: no_analysis, debugging_opts: debugging_opts, prints: prints, diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index f661b2a38b6..a4d34aaf652 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -121,7 +121,7 @@ pub fn compile_input(sess: &Session, let expanded_crate = assign_node_ids(sess, expanded_crate); // Lower ast -> hir. let lcx = LoweringContext::new(sess, Some(&expanded_crate)); - let dep_graph = DepGraph::new(sess.opts.build_dep_graph); + let dep_graph = DepGraph::new(sess.opts.build_dep_graph()); let mut hir_forest = time(sess.time_passes(), "lowering ast -> hir", || hir_map::Forest::new(lower_crate(&lcx, &expanded_crate), diff --git a/src/test/compile-fail/dep-graph-assoc-type-trans.rs b/src/test/compile-fail/dep-graph-assoc-type-trans.rs index d1ecff5984a..b56be9e5683 100644 --- a/src/test/compile-fail/dep-graph-assoc-type-trans.rs +++ b/src/test/compile-fail/dep-graph-assoc-type-trans.rs @@ -11,7 +11,7 @@ // Test that when a trait impl changes, fns whose body uses that trait // must also be recompiled. -// compile-flags: -Z incr-comp +// compile-flags: -Z query-dep-graph #![feature(rustc_attrs)] #![allow(warnings)] diff --git a/src/test/compile-fail/dep-graph-caller-callee.rs b/src/test/compile-fail/dep-graph-caller-callee.rs index acd6091cbdd..0d6954ab9df 100644 --- a/src/test/compile-fail/dep-graph-caller-callee.rs +++ b/src/test/compile-fail/dep-graph-caller-callee.rs @@ -11,7 +11,7 @@ // Test that immediate callers have to change when callee changes, but // not callers' callers. -// compile-flags: -Z incr-comp +// compile-flags: -Z query-dep-graph #![feature(rustc_attrs)] #![allow(dead_code)] diff --git a/src/test/compile-fail/dep-graph-struct-signature.rs b/src/test/compile-fail/dep-graph-struct-signature.rs index c16998cd33c..235fc5051d7 100644 --- a/src/test/compile-fail/dep-graph-struct-signature.rs +++ b/src/test/compile-fail/dep-graph-struct-signature.rs @@ -11,7 +11,7 @@ // Test cases where a changing struct appears in the signature of fns // and methods. -// compile-flags: -Z incr-comp +// compile-flags: -Z query-dep-graph #![feature(rustc_attrs)] #![allow(dead_code)] diff --git a/src/test/compile-fail/dep-graph-trait-impl-two-traits-same-method.rs b/src/test/compile-fail/dep-graph-trait-impl-two-traits-same-method.rs index 57e83586d8d..1afecd80ff5 100644 --- a/src/test/compile-fail/dep-graph-trait-impl-two-traits-same-method.rs +++ b/src/test/compile-fail/dep-graph-trait-impl-two-traits-same-method.rs @@ -11,7 +11,7 @@ // Test that adding an impl to a trait `Foo` DOES affect functions // that only use `Bar` if they have methods in common. -// compile-flags: -Z incr-comp +// compile-flags: -Z query-dep-graph #![feature(rustc_attrs)] #![allow(dead_code)] diff --git a/src/test/compile-fail/dep-graph-trait-impl-two-traits.rs b/src/test/compile-fail/dep-graph-trait-impl-two-traits.rs index ba54a056209..2ec7573cb81 100644 --- a/src/test/compile-fail/dep-graph-trait-impl-two-traits.rs +++ b/src/test/compile-fail/dep-graph-trait-impl-two-traits.rs @@ -11,7 +11,7 @@ // Test that adding an impl to a trait `Foo` does not affect functions // that only use `Bar`, so long as they do not have methods in common. -// compile-flags: -Z incr-comp +// compile-flags: -Z query-dep-graph #![feature(rustc_attrs)] #![allow(warnings)] diff --git a/src/test/compile-fail/dep-graph-trait-impl.rs b/src/test/compile-fail/dep-graph-trait-impl.rs index b38fdad9809..d87d7a6be1c 100644 --- a/src/test/compile-fail/dep-graph-trait-impl.rs +++ b/src/test/compile-fail/dep-graph-trait-impl.rs @@ -11,7 +11,7 @@ // Test that when a trait impl changes, fns whose body uses that trait // must also be recompiled. -// compile-flags: -Z incr-comp +// compile-flags: -Z query-dep-graph #![feature(rustc_attrs)] #![allow(warnings)] diff --git a/src/test/compile-fail/dep-graph-unrelated.rs b/src/test/compile-fail/dep-graph-unrelated.rs index 8feec12a2f7..079f2b52fd4 100644 --- a/src/test/compile-fail/dep-graph-unrelated.rs +++ b/src/test/compile-fail/dep-graph-unrelated.rs @@ -10,7 +10,7 @@ // Test that two unrelated functions have no trans dependency. -// compile-flags: -Z incr-comp +// compile-flags: -Z query-dep-graph #![feature(rustc_attrs)] #![allow(dead_code)] diff --git a/src/test/run-make/execution-engine/test.rs b/src/test/run-make/execution-engine/test.rs index 91b4f5f30ad..12cc475f121 100644 --- a/src/test/run-make/execution-engine/test.rs +++ b/src/test/run-make/execution-engine/test.rs @@ -239,7 +239,7 @@ fn compile_program(input: &str, sysroot: PathBuf) let krate = driver::assign_node_ids(&sess, krate); let lcx = LoweringContext::new(&sess, Some(&krate)); - let dep_graph = DepGraph::new(sess.opts.build_dep_graph); + let dep_graph = DepGraph::new(sess.opts.build_dep_graph()); let mut hir_forest = ast_map::Forest::new(lower_crate(&lcx, &krate), dep_graph); let arenas = ty::CtxtArenas::new(); let ast_map = driver::make_map(&sess, &mut hir_forest);