From 796264b6dfa6161e9a3f2c6fa7af830e9ed848df Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Fri, 15 Dec 2017 14:03:48 -0600 Subject: [PATCH] incr.comp.: Add -Cincremental in addition to -Zincremental --- src/librustc/session/config.rs | 26 +++++++++++++++++++++++--- src/librustc_trans/base.rs | 2 +- src/tools/compiletest/src/runtest.rs | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 009fb619846..a1cf38ae336 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -1013,6 +1013,8 @@ fn parse_optimization_fuel(slot: &mut Option<(String, u64)>, v: Option<&str>) -> "set the threshold for inlining a function (default: 225)"), panic: Option = (None, parse_panic_strategy, [TRACKED], "panic strategy to compile crate with"), + incremental: Option = (None, parse_opt_string, [UNTRACKED], + "enable incremental compilation"), } options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, @@ -1663,7 +1665,24 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches) early_error(error_format, "Value for codegen units must be a positive nonzero integer"); } - if cg.lto && debugging_opts.incremental.is_some() { + let incremental = match (&debugging_opts.incremental, &cg.incremental) { + (&Some(ref path1), &Some(ref path2)) => { + if path1 != path2 { + early_error(error_format, + &format!("conflicting paths for `-Z incremental` and \ + `-C incremental` specified: {} versus {}", + path1, + path2)); + } else { + Some(path1) + } + } + (&Some(ref path), &None) => Some(path), + (&None, &Some(ref path)) => Some(path), + (&None, &None) => None, + }.map(|m| PathBuf::from(m)); + + if cg.lto && incremental.is_some() { early_error(error_format, "can't perform LTO when compiling incrementally"); } @@ -1837,8 +1856,6 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches) let crate_name = matches.opt_str("crate-name"); - let incremental = debugging_opts.incremental.as_ref().map(|m| PathBuf::from(m)); - (Options { crate_types, optimize: opt_level, @@ -2581,6 +2598,9 @@ fn test_codegen_options_tracking_hash() { opts.cg.save_temps = true; assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash()); + opts.cg.incremental = Some(String::from("abc")); + assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash()); + // Make sure changing a [TRACKED] option changes the hash opts = reference.clone(); diff --git a/src/librustc_trans/base.rs b/src/librustc_trans/base.rs index bfc72ff06aa..1314c98c8a3 100644 --- a/src/librustc_trans/base.rs +++ b/src/librustc_trans/base.rs @@ -1025,7 +1025,7 @@ fn collect_and_partition_translation_items<'a, 'tcx>( assert_symbols_are_distinct(tcx, items.iter()); - let strategy = if tcx.sess.opts.debugging_opts.incremental.is_some() { + let strategy = if tcx.sess.opts.incremental.is_some() { PartitioningStrategy::PerModule } else { PartitioningStrategy::FixedUnitCount(tcx.sess.codegen_units()) diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 06e79855416..3aee88136a1 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -1506,7 +1506,7 @@ fn make_compile_args(&self, input_file: &Path, output_file: TargetLocation) -> C if let Some(ref incremental_dir) = self.props.incremental_dir { rustc.args(&[ - "-Z", + "-C", &format!("incremental={}", incremental_dir.display()), ]); rustc.args(&["-Z", "incremental-verify-ich"]); -- GitLab