From a73d1bf6313e4126bedf8fa3ed14ffbea94d8513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Wed, 29 Nov 2023 00:00:00 +0000 Subject: [PATCH 1/2] Inline check_thread_count implementation --- compiler/rustc_session/src/config.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index e694e150b31..b431c6b9213 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -2121,16 +2121,6 @@ fn should_override_cgus_and_disable_thinlto( (disable_local_thinlto, codegen_units) } -fn check_thread_count(handler: &EarlyErrorHandler, unstable_opts: &UnstableOptions) { - if unstable_opts.threads == 0 { - handler.early_error("value for threads must be a positive non-zero integer"); - } - - if unstable_opts.threads > 1 && unstable_opts.fuel.is_some() { - handler.early_error("optimization fuel is incompatible with multiple threads"); - } -} - fn collect_print_requests( handler: &EarlyErrorHandler, cg: &mut CodegenOptions, @@ -2646,7 +2636,13 @@ pub fn build_session_options( let (disable_local_thinlto, mut codegen_units) = should_override_cgus_and_disable_thinlto(handler, &output_types, matches, cg.codegen_units); - check_thread_count(handler, &unstable_opts); + if unstable_opts.threads == 0 { + handler.early_error("value for threads must be a positive non-zero integer"); + } + + if unstable_opts.threads > 1 && unstable_opts.fuel.is_some() { + handler.early_error("optimization fuel is incompatible with multiple threads"); + } let incremental = cg.incremental.as_ref().map(PathBuf::from); From 1a47e413b2e3ad25fa6cf99465ae8dbd48b595cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Fri, 8 Dec 2023 00:00:00 +0000 Subject: [PATCH 2/2] Fuel is incompatible with incremental compilation --- compiler/rustc_session/src/config.rs | 6 +++++- tests/ui/invalid-compile-flags/fuel.rs | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/ui/invalid-compile-flags/fuel.rs diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index b431c6b9213..1ea3ab0d5ec 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -2640,9 +2640,13 @@ pub fn build_session_options( handler.early_error("value for threads must be a positive non-zero integer"); } - if unstable_opts.threads > 1 && unstable_opts.fuel.is_some() { + let fuel = unstable_opts.fuel.is_some() || unstable_opts.print_fuel.is_some(); + if fuel && unstable_opts.threads > 1 { handler.early_error("optimization fuel is incompatible with multiple threads"); } + if fuel && cg.incremental.is_some() { + handler.early_error("optimization fuel is incompatible with incremental compilation"); + } let incremental = cg.incremental.as_ref().map(PathBuf::from); diff --git a/tests/ui/invalid-compile-flags/fuel.rs b/tests/ui/invalid-compile-flags/fuel.rs new file mode 100644 index 00000000000..456bc47d359 --- /dev/null +++ b/tests/ui/invalid-compile-flags/fuel.rs @@ -0,0 +1,11 @@ +// revisions: incremental threads +// dont-check-compiler-stderr +// +// [threads] compile-flags: -Zfuel=a=1 -Zthreads=2 +// [threads] error-pattern:optimization fuel is incompatible with multiple threads +// +// [incremental] incremental +// [incremental] compile-flags: -Zprint-fuel=a +// [incremental] error-pattern:optimization fuel is incompatible with incremental compilation + +fn main() {}