Skip to content

Commit

Permalink
Disallow values for -C no-* and -Z no-* options again.
Browse files Browse the repository at this point in the history
With the exception of `-C no-redzone`, because that could take a value
before this PR.

This partially undoes one of the earlier commits in this PR, which added
the ability to take a value to all boolean options that lacked it.

The help output for these options looks like this:
```
    -C         no-vectorize-slp=val -- disable LLVM's SLP vectorization pass
```
The "=val" part is a lie, but hopefully this will be fixed in the future.
  • Loading branch information
nnethercote committed Apr 19, 2020
1 parent dc06539 commit 3e3fd73
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 41 deletions.
23 changes: 6 additions & 17 deletions src/doc/rustc/src/codegen-options/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,30 +180,19 @@ If not specified, overflow checks are enabled if

## no-prepopulate-passes

This flag controls whether the pass manager uses a pre-populated list of
passes. It takes one of the following values:

* `y`, `yes`, `on`, or no value: use an empty list of passes.
* `n`, `no`, or `off`: use a pre-populated list of passes (the default).
This flag tells the pass manager to use an empty list of passes, instead of the
usual pre-populated list of passes.

## no-vectorize-loops

This flag controls whether `rustc` will attempt to [vectorize
loops](https://llvm.org/docs/Vectorizers.html#the-loop-vectorizer). It takes
one of the following values:

* `y`, `yes`, `on`, or no value: disable loop vectorization.
* `n`, `no`, or `off`: enable loop vectorization (the default).
This flag disables [loop
vectorization](https://llvm.org/docs/Vectorizers.html#the-loop-vectorizer).

## no-vectorize-slp

This flag controls whether `rustc` will attempt to vectorize code using
This flag disables vectorization using
[superword-level
parallelism](https://llvm.org/docs/Vectorizers.html#the-slp-vectorizer).
It takes one of the following values:

* `y`, `yes`, `on`, or no value: disable SLP vectorization.
* `n`, `no`, or `off`: enable SLP vectorization (the default).

## soft-float

Expand Down Expand Up @@ -309,7 +298,7 @@ This flag controls the optimization level.
* `2`: some optimizations.
* `3`: all optimizations.
* `s`: optimize for binary size.
* `z`: optimize for binary size, but also turn off loop vectorization..
* `z`: optimize for binary size, but also turn off loop vectorization.

Note: The [`-O` flag][option-o-optimize] is an alias for `-C opt-level=2`.

Expand Down
58 changes: 34 additions & 24 deletions src/librustc_session/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ macro_rules! options {

#[allow(non_upper_case_globals, dead_code)]
mod $mod_desc {
pub const parse_no_flag: &str = "no value";
pub const parse_bool: &str = "one of: `y`, `yes`, `on`, `n`, `no`, or `off`";
pub const parse_opt_bool: &str = parse_bool;
pub const parse_string: &str = "a string";
Expand Down Expand Up @@ -288,6 +289,15 @@ macro_rules! options {
}
)*

/// This is for boolean options that don't take a value and start with
/// `no-`. This style of option is deprecated.
fn parse_no_flag(slot: &mut bool, v: Option<&str>) -> bool {
match v {
None => { *slot = true; true }
Some(_) => false,
}
}

/// Use this for any boolean option that has a static default.
fn parse_bool(slot: &mut bool, v: Option<&str>) -> bool {
match v {
Expand Down Expand Up @@ -640,12 +650,12 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
"set rpath values in libs/exes (default: no)"),
overflow_checks: Option<bool> = (None, parse_opt_bool, [TRACKED],
"use overflow checks for integer arithmetic"),
no_prepopulate_passes: bool = (false, parse_bool, [TRACKED],
"give an empty list of passes to the pass manager (default: no)"),
no_vectorize_loops: bool = (false, parse_bool, [TRACKED],
"disable loop vectorization optimization passes (default: no)"),
no_vectorize_slp: bool = (false, parse_bool, [TRACKED],
"disable LLVM's SLP vectorization pass (default: no)"),
no_prepopulate_passes: bool = (false, parse_no_flag, [TRACKED],
"give an empty list of passes to the pass manager"),
no_vectorize_loops: bool = (false, parse_no_flag, [TRACKED],
"disable loop vectorization optimization passes"),
no_vectorize_slp: bool = (false, parse_no_flag, [TRACKED],
"disable LLVM's SLP vectorization pass"),
soft_float: bool = (false, parse_bool, [TRACKED],
"use soft float ABI (*eabihf targets only) (default: no)"),
prefer_dynamic: bool = (false, parse_bool, [TRACKED],
Expand All @@ -664,7 +674,7 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
"divide crate into N units to optimize in parallel"),
remark: Passes = (Passes::Some(Vec::new()), parse_passes, [UNTRACKED],
"print remarks for these optimization passes (space separated, or \"all\")"),
no_stack_check: bool = (false, parse_bool, [UNTRACKED],
no_stack_check: bool = (false, parse_no_flag, [UNTRACKED],
"this option is deprecated and does nothing"),
debuginfo: usize = (0, parse_uint, [TRACKED],
"debug info emission level (0 = no debug info, 1 = line tables only, \
Expand Down Expand Up @@ -725,8 +735,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"verify LLVM IR (default: no)"),
borrowck_stats: bool = (false, parse_bool, [UNTRACKED],
"gather borrowck statistics (default: no)"),
no_landing_pads: bool = (false, parse_bool, [TRACKED],
"omit landing pads for unwinding (default: no)"),
no_landing_pads: bool = (false, parse_no_flag, [TRACKED],
"omit landing pads for unwinding"),
fewer_names: bool = (false, parse_bool, [TRACKED],
"reduce memory use by retaining fewer names within compilation artifacts (LLVM-IR) \
(default: no)"),
Expand Down Expand Up @@ -758,8 +768,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"parse only; do not compile, assemble, or link (default: no)"),
dual_proc_macros: bool = (false, parse_bool, [TRACKED],
"load proc macros for both target and host, but only link to the target (default: no)"),
no_codegen: bool = (false, parse_bool, [TRACKED],
"run all passes except codegen; no output (default: no)"),
no_codegen: bool = (false, parse_no_flag, [TRACKED],
"run all passes except codegen; no output"),
treat_err_as_bug: Option<usize> = (None, parse_treat_err_as_bug, [TRACKED],
"treat error number `val` that occurs as bug"),
report_delayed_bugs: bool = (false, parse_bool, [TRACKED],
Expand Down Expand Up @@ -789,8 +799,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
(default: no)"),
query_dep_graph: bool = (false, parse_bool, [UNTRACKED],
"enable queries of the dependency graph for regression testing (default: no)"),
no_analysis: bool = (false, parse_bool, [UNTRACKED],
"parse and expand the source, but run no analysis (default: no)"),
no_analysis: bool = (false, parse_no_flag, [UNTRACKED],
"parse and expand the source, but run no analysis"),
unstable_options: bool = (false, parse_bool, [UNTRACKED],
"adds unstable command line options to rustc interface (default: no)"),
force_overflow_checks: Option<bool> = (None, parse_opt_bool, [TRACKED],
Expand All @@ -799,8 +809,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"for every macro invocation, print its name and arguments (default: no)"),
debug_macros: bool = (false, parse_bool, [TRACKED],
"emit line numbers debug info inside macros (default: no)"),
no_generate_arange_section: bool = (false, parse_bool, [TRACKED],
"omit DWARF address ranges that give faster lookups (default: no)"),
no_generate_arange_section: bool = (false, parse_no_flag, [TRACKED],
"omit DWARF address ranges that give faster lookups"),
keep_hygiene_data: bool = (false, parse_bool, [UNTRACKED],
"keep hygiene data after analysis (default: no)"),
show_span: Option<String> = (None, parse_opt_string, [TRACKED],
Expand Down Expand Up @@ -862,7 +872,7 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"extra arguments to prepend to the linker invocation (space separated)"),
profile: bool = (false, parse_bool, [TRACKED],
"insert profiling code (default: no)"),
no_profiler_runtime: bool = (false, parse_bool, [TRACKED],
no_profiler_runtime: bool = (false, parse_no_flag, [TRACKED],
"prevent automatic injection of the profiler_builtins crate"),
relro_level: Option<RelroLevel> = (None, parse_relro_level, [TRACKED],
"choose which RELRO level to use"),
Expand Down Expand Up @@ -911,12 +921,12 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
(default: no)"),
share_generics: Option<bool> = (None, parse_opt_bool, [TRACKED],
"make the current crate share its generic instantiations"),
no_parallel_llvm: bool = (false, parse_bool, [UNTRACKED],
"run LLVM in non-parallel mode (while keeping codegen-units and ThinLTO) (default: no)"),
no_leak_check: bool = (false, parse_bool, [UNTRACKED],
"disable the 'leak check' for subtyping; unsound, but useful for tests (default: no)"),
no_interleave_lints: bool = (false, parse_bool, [UNTRACKED],
"execute lints separately; allows benchmarking individual lints (default: no)"),
no_parallel_llvm: bool = (false, parse_no_flag, [UNTRACKED],
"run LLVM in non-parallel mode (while keeping codegen-units and ThinLTO)"),
no_leak_check: bool = (false, parse_no_flag, [UNTRACKED],
"disable the 'leak check' for subtyping; unsound, but useful for tests"),
no_interleave_lints: bool = (false, parse_no_flag, [UNTRACKED],
"execute lints separately; allows benchmarking individual lints"),
crate_attr: Vec<String> = (Vec::new(), parse_string_push, [TRACKED],
"inject the given attribute in the crate"),
self_profile: SwitchWithOptPath = (SwitchWithOptPath::Disabled,
Expand Down Expand Up @@ -953,8 +963,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"deduplicate identical diagnostics (default: yes)"),
control_flow_guard: CFGuard = (CFGuard::Disabled, parse_cfguard, [UNTRACKED],
"use Windows Control Flow Guard (`disabled`, `nochecks` or `checks`)"),
no_link: bool = (false, parse_bool, [TRACKED],
"compile without linking (default: no)"),
no_link: bool = (false, parse_no_flag, [TRACKED],
"compile without linking"),
link_only: bool = (false, parse_bool, [TRACKED],
"link the `.rlink` file generated by `-Z no-link` (default: no)"),
new_llvm_pass_manager: bool = (false, parse_bool, [TRACKED],
Expand Down

0 comments on commit 3e3fd73

Please sign in to comment.