1
Fork 0

Show defaults in options descriptions.

For all `-C` and `-Z` options that have them.

The commit also rewords a few options to make them clearer, mostly by
avoiding the word "don't".

It also removes the listed default for `-Cinline-threshold`, which is
incorrect -- that option doesn't have a static default.
This commit is contained in:
Nicholas Nethercote 2020-04-03 10:42:29 +11:00
parent 58217bc996
commit cc93e51ed3

View file

@ -622,7 +622,7 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
link_args: Vec<String> = (Vec::new(), parse_list, [UNTRACKED], link_args: Vec<String> = (Vec::new(), parse_list, [UNTRACKED],
"extra arguments to append to the linker invocation (space separated)"), "extra arguments to append to the linker invocation (space separated)"),
link_dead_code: bool = (false, parse_bool, [UNTRACKED], link_dead_code: bool = (false, parse_bool, [UNTRACKED],
"don't let linker strip dead code (turning it on can be used for code coverage)"), "keep dead code at link time (useful for code coverage) (default: no)"),
lto: LtoCli = (LtoCli::Unspecified, parse_lto, [TRACKED], lto: LtoCli = (LtoCli::Unspecified, parse_lto, [TRACKED],
"perform LLVM link-time optimizations"), "perform LLVM link-time optimizations"),
target_cpu: Option<String> = (None, parse_opt_string, [TRACKED], target_cpu: Option<String> = (None, parse_opt_string, [TRACKED],
@ -635,21 +635,21 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
llvm_args: Vec<String> = (Vec::new(), parse_list, [TRACKED], llvm_args: Vec<String> = (Vec::new(), parse_list, [TRACKED],
"a list of arguments to pass to LLVM (space separated)"), "a list of arguments to pass to LLVM (space separated)"),
save_temps: bool = (false, parse_bool, [UNTRACKED], save_temps: bool = (false, parse_bool, [UNTRACKED],
"save all temporary output files during compilation"), "save all temporary output files during compilation (default: no)"),
rpath: bool = (false, parse_bool, [UNTRACKED], rpath: bool = (false, parse_bool, [UNTRACKED],
"set rpath values in libs/exes"), "set rpath values in libs/exes (default: no)"),
overflow_checks: Option<bool> = (None, parse_opt_bool, [TRACKED], overflow_checks: Option<bool> = (None, parse_opt_bool, [TRACKED],
"use overflow checks for integer arithmetic"), "use overflow checks for integer arithmetic"),
no_prepopulate_passes: bool = (false, parse_bool, [TRACKED], no_prepopulate_passes: bool = (false, parse_bool, [TRACKED],
"don't pre-populate the pass manager with a list of passes"), "give an empty list of passes to the pass manager (default: no)"),
no_vectorize_loops: bool = (false, parse_bool, [TRACKED], no_vectorize_loops: bool = (false, parse_bool, [TRACKED],
"don't run the loop vectorization optimization passes"), "disable loop vectorization optimization passes (default: no)"),
no_vectorize_slp: bool = (false, parse_bool, [TRACKED], no_vectorize_slp: bool = (false, parse_bool, [TRACKED],
"don't run LLVM's SLP vectorization pass"), "disable LLVM's SLP vectorization pass (default: no)"),
soft_float: bool = (false, parse_bool, [TRACKED], soft_float: bool = (false, parse_bool, [TRACKED],
"use soft float ABI (*eabihf targets only)"), "use soft float ABI (*eabihf targets only) (default: no)"),
prefer_dynamic: bool = (false, parse_bool, [TRACKED], prefer_dynamic: bool = (false, parse_bool, [TRACKED],
"prefer dynamic linking to static linking"), "prefer dynamic linking to static linking (default: no)"),
no_redzone: Option<bool> = (None, parse_opt_bool, [TRACKED], no_redzone: Option<bool> = (None, parse_opt_bool, [TRACKED],
"disable the use of the redzone"), "disable the use of the redzone"),
relocation_model: Option<String> = (None, parse_opt_string, [TRACKED], relocation_model: Option<String> = (None, parse_opt_string, [TRACKED],
@ -665,24 +665,24 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
remark: Passes = (Passes::Some(Vec::new()), parse_passes, [UNTRACKED], remark: Passes = (Passes::Some(Vec::new()), parse_passes, [UNTRACKED],
"print remarks for these optimization passes (space separated, or \"all\")"), "print remarks for these optimization passes (space separated, or \"all\")"),
no_stack_check: bool = (false, parse_bool, [UNTRACKED], no_stack_check: bool = (false, parse_bool, [UNTRACKED],
"the `--no-stack-check` flag is deprecated and does nothing"), "this option is deprecated and does nothing"),
debuginfo: usize = (0, parse_uint, [TRACKED], debuginfo: usize = (0, parse_uint, [TRACKED],
"debug info emission level, 0 = no debug info, 1 = line tables only, \ "debug info emission level (0 = no debug info, 1 = line tables only, \
2 = full debug info with variable and type information"), 2 = full debug info with variable and type information; default: 0)"),
opt_level: String = ("0".to_string(), parse_string, [TRACKED], opt_level: String = ("0".to_string(), parse_string, [TRACKED],
"optimize with possible levels 0-3, s, or z"), "optimization level (0-3, s, or z; default: 0)"),
force_frame_pointers: Option<bool> = (None, parse_opt_bool, [TRACKED], force_frame_pointers: Option<bool> = (None, parse_opt_bool, [TRACKED],
"force use of the frame pointers"), "force use of the frame pointers"),
debug_assertions: Option<bool> = (None, parse_opt_bool, [TRACKED], debug_assertions: Option<bool> = (None, parse_opt_bool, [TRACKED],
"explicitly enable the `cfg(debug_assertions)` directive"), "explicitly enable the `cfg(debug_assertions)` directive"),
inline_threshold: Option<usize> = (None, parse_opt_uint, [TRACKED], inline_threshold: Option<usize> = (None, parse_opt_uint, [TRACKED],
"set the threshold for inlining a function (default: 225)"), "set the threshold for inlining a function"),
panic: Option<PanicStrategy> = (None, parse_panic_strategy, panic: Option<PanicStrategy> = (None, parse_panic_strategy,
[TRACKED], "panic strategy to compile crate with"), [TRACKED], "panic strategy to compile crate with"),
incremental: Option<String> = (None, parse_opt_string, [UNTRACKED], incremental: Option<String> = (None, parse_opt_string, [UNTRACKED],
"enable incremental compilation"), "enable incremental compilation"),
default_linker_libraries: bool = (false, parse_bool, [UNTRACKED], default_linker_libraries: bool = (false, parse_bool, [UNTRACKED],
"allow the linker to link its default libraries"), "allow the linker to link its default libraries (default: no)"),
linker_flavor: Option<LinkerFlavor> = (None, parse_linker_flavor, [UNTRACKED], linker_flavor: Option<LinkerFlavor> = (None, parse_linker_flavor, [UNTRACKED],
"linker flavor"), "linker flavor"),
linker_plugin_lto: LinkerPluginLto = (LinkerPluginLto::Disabled, linker_plugin_lto: LinkerPluginLto = (LinkerPluginLto::Disabled,
@ -701,41 +701,43 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
codegen_backend: Option<String> = (None, parse_opt_string, [TRACKED], codegen_backend: Option<String> = (None, parse_opt_string, [TRACKED],
"the backend to use"), "the backend to use"),
verbose: bool = (false, parse_bool, [UNTRACKED], verbose: bool = (false, parse_bool, [UNTRACKED],
"in general, enable more debug printouts"), "in general, enable more debug printouts (default: no)"),
// o/w tests have closure@path
span_free_formats: bool = (false, parse_bool, [UNTRACKED], span_free_formats: bool = (false, parse_bool, [UNTRACKED],
"when debug-printing compiler state, do not include spans"), // o/w tests have closure@path "exclude spans when debug-printing compiler state (default: no)"),
identify_regions: bool = (false, parse_bool, [UNTRACKED], identify_regions: bool = (false, parse_bool, [UNTRACKED],
"make unnamed regions display as '# (where # is some non-ident unique id)"), "display unnamed regions as `'<id>`, using a non-ident unique id (default: no)"),
borrowck: String = ("migrate".to_string(), parse_string, [UNTRACKED], borrowck: String = ("migrate".to_string(), parse_string, [UNTRACKED],
"select which borrowck is used (`mir` or `migrate`)"), "select which borrowck is used (`mir` or `migrate`) (default: `migrate`)"),
time_passes: bool = (false, parse_bool, [UNTRACKED], time_passes: bool = (false, parse_bool, [UNTRACKED],
"measure time of each rustc pass"), "measure time of each rustc pass (default: no)"),
time: bool = (false, parse_bool, [UNTRACKED], time: bool = (false, parse_bool, [UNTRACKED],
"measure time of rustc processes"), "measure time of rustc processes (default: no)"),
time_llvm_passes: bool = (false, parse_bool, [UNTRACKED], time_llvm_passes: bool = (false, parse_bool, [UNTRACKED],
"measure time of each LLVM pass"), "measure time of each LLVM pass (default: no)"),
llvm_time_trace: bool = (false, parse_bool, [UNTRACKED], llvm_time_trace: bool = (false, parse_bool, [UNTRACKED],
"generate JSON tracing data file from LLVM data"), "generate JSON tracing data file from LLVM data (default: no)"),
input_stats: bool = (false, parse_bool, [UNTRACKED], input_stats: bool = (false, parse_bool, [UNTRACKED],
"gather statistics about the input"), "gather statistics about the input (default: no)"),
asm_comments: bool = (false, parse_bool, [TRACKED], asm_comments: bool = (false, parse_bool, [TRACKED],
"generate comments into the assembly (may change behavior)"), "generate comments into the assembly (may change behavior) (default: no)"),
verify_llvm_ir: bool = (false, parse_bool, [TRACKED], verify_llvm_ir: bool = (false, parse_bool, [TRACKED],
"verify LLVM IR"), "verify LLVM IR (default: no)"),
borrowck_stats: bool = (false, parse_bool, [UNTRACKED], borrowck_stats: bool = (false, parse_bool, [UNTRACKED],
"gather borrowck statistics"), "gather borrowck statistics (default: no)"),
no_landing_pads: bool = (false, parse_bool, [TRACKED], no_landing_pads: bool = (false, parse_bool, [TRACKED],
"omit landing pads for unwinding"), "omit landing pads for unwinding (default: no)"),
fewer_names: bool = (false, parse_bool, [TRACKED], fewer_names: bool = (false, parse_bool, [TRACKED],
"reduce memory use by retaining fewer names within compilation artifacts (LLVM-IR)"), "reduce memory use by retaining fewer names within compilation artifacts (LLVM-IR) \
(default: no)"),
meta_stats: bool = (false, parse_bool, [UNTRACKED], meta_stats: bool = (false, parse_bool, [UNTRACKED],
"gather metadata statistics"), "gather metadata statistics (default: no)"),
print_link_args: bool = (false, parse_bool, [UNTRACKED], print_link_args: bool = (false, parse_bool, [UNTRACKED],
"print the arguments passed to the linker"), "print the arguments passed to the linker (default: no)"),
print_llvm_passes: bool = (false, parse_bool, [UNTRACKED], print_llvm_passes: bool = (false, parse_bool, [UNTRACKED],
"prints the LLVM optimization passes being run"), "print the LLVM optimization passes being run (default: no)"),
ast_json: bool = (false, parse_bool, [UNTRACKED], ast_json: bool = (false, parse_bool, [UNTRACKED],
"print the AST as JSON and halt"), "print the AST as JSON and halt (default: no)"),
// We default to 1 here since we want to behave like // We default to 1 here since we want to behave like
// a sequential compiler for now. This'll likely be adjusted // a sequential compiler for now. This'll likely be adjusted
// in the future. Note that -Zthreads=0 is the way to get // in the future. Note that -Zthreads=0 is the way to get
@ -743,69 +745,72 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
threads: usize = (1, parse_threads, [UNTRACKED], threads: usize = (1, parse_threads, [UNTRACKED],
"use a thread pool with N threads"), "use a thread pool with N threads"),
ast_json_noexpand: bool = (false, parse_bool, [UNTRACKED], ast_json_noexpand: bool = (false, parse_bool, [UNTRACKED],
"print the pre-expansion AST as JSON and halt"), "print the pre-expansion AST as JSON and halt (default: no)"),
ls: bool = (false, parse_bool, [UNTRACKED], ls: bool = (false, parse_bool, [UNTRACKED],
"list the symbols defined by a library crate"), "list the symbols defined by a library crate (default: no)"),
save_analysis: bool = (false, parse_bool, [UNTRACKED], save_analysis: bool = (false, parse_bool, [UNTRACKED],
"write syntax and type analysis (in JSON format) information, in \ "write syntax and type analysis (in JSON format) information, in \
addition to normal output"), addition to normal output (default: no)"),
print_region_graph: bool = (false, parse_bool, [UNTRACKED], print_region_graph: bool = (false, parse_bool, [UNTRACKED],
"prints region inference graph. \ "prints region inference graph. \
Use with RUST_REGION_GRAPH=help for more info"), Use with RUST_REGION_GRAPH=help for more info (default: no)"),
parse_only: bool = (false, parse_bool, [UNTRACKED], parse_only: bool = (false, parse_bool, [UNTRACKED],
"parse only; do not compile, assemble, or link"), "parse only; do not compile, assemble, or link (default: no)"),
dual_proc_macros: bool = (false, parse_bool, [TRACKED], dual_proc_macros: bool = (false, parse_bool, [TRACKED],
"load proc macros for both target and host, but only link to the target"), "load proc macros for both target and host, but only link to the target (default: no)"),
no_codegen: bool = (false, parse_bool, [TRACKED], no_codegen: bool = (false, parse_bool, [TRACKED],
"run all passes except codegen; no output"), "run all passes except codegen; no output (default: no)"),
treat_err_as_bug: Option<usize> = (None, parse_treat_err_as_bug, [TRACKED], treat_err_as_bug: Option<usize> = (None, parse_treat_err_as_bug, [TRACKED],
"treat error number `val` that occurs as bug"), "treat error number `val` that occurs as bug"),
report_delayed_bugs: bool = (false, parse_bool, [TRACKED], report_delayed_bugs: bool = (false, parse_bool, [TRACKED],
"immediately print bugs registered with `delay_span_bug`"), "immediately print bugs registered with `delay_span_bug` (default: no)"),
macro_backtrace: bool = (false, parse_bool, [UNTRACKED], macro_backtrace: bool = (false, parse_bool, [UNTRACKED],
"show macro backtraces"), "show macro backtraces (default: no)"),
teach: bool = (false, parse_bool, [TRACKED], teach: bool = (false, parse_bool, [TRACKED],
"show extended diagnostic help"), "show extended diagnostic help (default: no)"),
terminal_width: Option<usize> = (None, parse_opt_uint, [UNTRACKED], terminal_width: Option<usize> = (None, parse_opt_uint, [UNTRACKED],
"set the current terminal width"), "set the current terminal width"),
panic_abort_tests: bool = (false, parse_bool, [TRACKED], panic_abort_tests: bool = (false, parse_bool, [TRACKED],
"support compiling tests with panic=abort"), "support compiling tests with panic=abort (default: no)"),
dep_tasks: bool = (false, parse_bool, [UNTRACKED], dep_tasks: bool = (false, parse_bool, [UNTRACKED],
"print tasks that execute and the color their dep node gets (requires debug build)"), "print tasks that execute and the color their dep node gets (requires debug build) \
(default: no)"),
incremental_info: bool = (false, parse_bool, [UNTRACKED], incremental_info: bool = (false, parse_bool, [UNTRACKED],
"print high-level information about incremental reuse (or the lack thereof)"), "print high-level information about incremental reuse (or the lack thereof) \
(default: no)"),
incremental_verify_ich: bool = (false, parse_bool, [UNTRACKED], incremental_verify_ich: bool = (false, parse_bool, [UNTRACKED],
"verify incr. comp. hashes of green query instances"), "verify incr. comp. hashes of green query instances (default: no)"),
incremental_ignore_spans: bool = (false, parse_bool, [UNTRACKED], incremental_ignore_spans: bool = (false, parse_bool, [UNTRACKED],
"ignore spans during ICH computation -- used for testing"), "ignore spans during ICH computation -- used for testing (default: no)"),
instrument_mcount: bool = (false, parse_bool, [TRACKED], instrument_mcount: bool = (false, parse_bool, [TRACKED],
"insert function instrument code for mcount-based tracing"), "insert function instrument code for mcount-based tracing (default: no)"),
dump_dep_graph: bool = (false, parse_bool, [UNTRACKED], dump_dep_graph: bool = (false, parse_bool, [UNTRACKED],
"dump the dependency graph to $RUST_DEP_GRAPH (default: /tmp/dep_graph.gv)"), "dump the dependency graph to $RUST_DEP_GRAPH (default: /tmp/dep_graph.gv) \
(default: no)"),
query_dep_graph: bool = (false, parse_bool, [UNTRACKED], query_dep_graph: bool = (false, parse_bool, [UNTRACKED],
"enable queries of the dependency graph for regression testing"), "enable queries of the dependency graph for regression testing (default: no)"),
no_analysis: bool = (false, parse_bool, [UNTRACKED], no_analysis: bool = (false, parse_bool, [UNTRACKED],
"parse and expand the source, but run no analysis"), "parse and expand the source, but run no analysis (default: no)"),
unstable_options: bool = (false, parse_bool, [UNTRACKED], unstable_options: bool = (false, parse_bool, [UNTRACKED],
"adds unstable command line options to rustc interface"), "adds unstable command line options to rustc interface (default: no)"),
force_overflow_checks: Option<bool> = (None, parse_opt_bool, [TRACKED], force_overflow_checks: Option<bool> = (None, parse_opt_bool, [TRACKED],
"force overflow checks on or off"), "force overflow checks on or off"),
trace_macros: bool = (false, parse_bool, [UNTRACKED], trace_macros: bool = (false, parse_bool, [UNTRACKED],
"for every macro invocation, print its name and arguments"), "for every macro invocation, print its name and arguments (default: no)"),
debug_macros: bool = (false, parse_bool, [TRACKED], debug_macros: bool = (false, parse_bool, [TRACKED],
"emit line numbers debug info inside macros"), "emit line numbers debug info inside macros (default: no)"),
no_generate_arange_section: bool = (false, parse_bool, [TRACKED], no_generate_arange_section: bool = (false, parse_bool, [TRACKED],
"don't generate DWARF address ranges that give faster lookups"), "omit DWARF address ranges that give faster lookups (default: no)"),
keep_hygiene_data: bool = (false, parse_bool, [UNTRACKED], keep_hygiene_data: bool = (false, parse_bool, [UNTRACKED],
"don't clear the hygiene data after analysis"), "keep hygiene data after analysis (default: no)"),
show_span: Option<String> = (None, parse_opt_string, [TRACKED], show_span: Option<String> = (None, parse_opt_string, [TRACKED],
"show spans for compiler debugging (expr|pat|ty)"), "show spans for compiler debugging (expr|pat|ty)"),
print_type_sizes: bool = (false, parse_bool, [UNTRACKED], print_type_sizes: bool = (false, parse_bool, [UNTRACKED],
"print layout information for each type encountered"), "print layout information for each type encountered (default: no)"),
print_mono_items: Option<String> = (None, parse_opt_string, [UNTRACKED], print_mono_items: Option<String> = (None, parse_opt_string, [UNTRACKED],
"print the result of the monomorphization collection pass"), "print the result of the monomorphization collection pass"),
mir_opt_level: usize = (1, parse_uint, [TRACKED], mir_opt_level: usize = (1, parse_uint, [TRACKED],
"set the MIR optimization level (0-3, default: 1)"), "MIR optimization level (0-3; default: 1)"),
mutable_noalias: bool = (false, parse_bool, [TRACKED], mutable_noalias: bool = (false, parse_bool, [TRACKED],
"emit noalias metadata for mutable references (default: no)"), "emit noalias metadata for mutable references (default: no)"),
dump_mir: Option<String> = (None, parse_opt_string, [UNTRACKED], dump_mir: Option<String> = (None, parse_opt_string, [UNTRACKED],
@ -817,29 +822,30 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
`foo | bar` all passes for function names containing 'foo' or 'bar'."), `foo | bar` all passes for function names containing 'foo' or 'bar'."),
dump_mir_dir: String = ("mir_dump".to_string(), parse_string, [UNTRACKED], dump_mir_dir: String = ("mir_dump".to_string(), parse_string, [UNTRACKED],
"the directory the MIR is dumped into"), "the directory the MIR is dumped into (default: `mir_dump`)"),
dump_mir_graphviz: bool = (false, parse_bool, [UNTRACKED], dump_mir_graphviz: bool = (false, parse_bool, [UNTRACKED],
"in addition to `.mir` files, create graphviz `.dot` files"), "in addition to `.mir` files, create graphviz `.dot` files (default: no)"),
dump_mir_dataflow: bool = (false, parse_bool, [UNTRACKED], dump_mir_dataflow: bool = (false, parse_bool, [UNTRACKED],
"in addition to `.mir` files, create graphviz `.dot` files with dataflow results"), "in addition to `.mir` files, create graphviz `.dot` files with dataflow results (default: no)"),
dump_mir_exclude_pass_number: bool = (false, parse_bool, [UNTRACKED], dump_mir_exclude_pass_number: bool = (false, parse_bool, [UNTRACKED],
"if set, exclude the pass number when dumping MIR (used in tests)"), "exclude the pass number when dumping MIR (used in tests) (default: no)"),
mir_emit_retag: bool = (false, parse_bool, [TRACKED], mir_emit_retag: bool = (false, parse_bool, [TRACKED],
"emit Retagging MIR statements, interpreted e.g., by miri; implies -Zmir-opt-level=0"), "emit Retagging MIR statements, interpreted e.g., by miri; implies -Zmir-opt-level=0 \
(default: no)"),
perf_stats: bool = (false, parse_bool, [UNTRACKED], perf_stats: bool = (false, parse_bool, [UNTRACKED],
"print some performance-related statistics"), "print some performance-related statistics (default: no)"),
query_stats: bool = (false, parse_bool, [UNTRACKED], query_stats: bool = (false, parse_bool, [UNTRACKED],
"print some statistics about the query system"), "print some statistics about the query system (default: no)"),
hir_stats: bool = (false, parse_bool, [UNTRACKED], hir_stats: bool = (false, parse_bool, [UNTRACKED],
"print some statistics about AST and HIR"), "print some statistics about AST and HIR (default: no)"),
always_encode_mir: bool = (false, parse_bool, [TRACKED], always_encode_mir: bool = (false, parse_bool, [TRACKED],
"encode MIR of all functions into the crate metadata"), "encode MIR of all functions into the crate metadata (default: no)"),
unleash_the_miri_inside_of_you: bool = (false, parse_bool, [TRACKED], unleash_the_miri_inside_of_you: bool = (false, parse_bool, [TRACKED],
"take the breaks off const evaluation. NOTE: this is unsound"), "take the brakes off const evaluation. NOTE: this is unsound (default: no)"),
osx_rpath_install_name: bool = (false, parse_bool, [TRACKED], osx_rpath_install_name: bool = (false, parse_bool, [TRACKED],
"pass `-install_name @rpath/...` to the macOS linker"), "pass `-install_name @rpath/...` to the macOS linker (default: no)"),
sanitizer: Option<Sanitizer> = (None, parse_sanitizer, [TRACKED], sanitizer: Option<Sanitizer> = (None, parse_sanitizer, [TRACKED],
"use a sanitizer"), "use a sanitizer"),
sanitizer_recover: Vec<Sanitizer> = (vec![], parse_sanitizer_list, [TRACKED], sanitizer_recover: Vec<Sanitizer> = (vec![], parse_sanitizer_list, [TRACKED],
"enable recovery for selected sanitizers"), "enable recovery for selected sanitizers"),
sanitizer_memory_track_origins: usize = (0, parse_sanitizer_memory_track_origins, [TRACKED], sanitizer_memory_track_origins: usize = (0, parse_sanitizer_memory_track_origins, [TRACKED],
@ -849,23 +855,24 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
print_fuel: Option<String> = (None, parse_opt_string, [TRACKED], print_fuel: Option<String> = (None, parse_opt_string, [TRACKED],
"make rustc print the total optimization fuel used by a crate"), "make rustc print the total optimization fuel used by a crate"),
force_unstable_if_unmarked: bool = (false, parse_bool, [TRACKED], force_unstable_if_unmarked: bool = (false, parse_bool, [TRACKED],
"force all crates to be `rustc_private` unstable"), "force all crates to be `rustc_private` unstable (default: no)"),
pre_link_arg: (/* redirected to pre_link_args */) = ((), parse_string_push, [UNTRACKED], pre_link_arg: (/* redirected to pre_link_args */) = ((), parse_string_push, [UNTRACKED],
"a single extra argument to prepend the linker invocation (can be used several times)"), "a single extra argument to prepend the linker invocation (can be used several times)"),
pre_link_args: Vec<String> = (Vec::new(), parse_list, [UNTRACKED], pre_link_args: Vec<String> = (Vec::new(), parse_list, [UNTRACKED],
"extra arguments to prepend to the linker invocation (space separated)"), "extra arguments to prepend to the linker invocation (space separated)"),
profile: bool = (false, parse_bool, [TRACKED], profile: bool = (false, parse_bool, [TRACKED],
"insert profiling code"), "insert profiling code (default: no)"),
no_profiler_runtime: bool = (false, parse_bool, [TRACKED], no_profiler_runtime: bool = (false, parse_bool, [TRACKED],
"don't automatically inject the profiler_builtins crate"), "prevent automatic injection of the profiler_builtins crate"),
relro_level: Option<RelroLevel> = (None, parse_relro_level, [TRACKED], relro_level: Option<RelroLevel> = (None, parse_relro_level, [TRACKED],
"choose which RELRO level to use"), "choose which RELRO level to use"),
nll_facts: bool = (false, parse_bool, [UNTRACKED], nll_facts: bool = (false, parse_bool, [UNTRACKED],
"dump facts from NLL analysis into side files"), "dump facts from NLL analysis into side files (default: no)"),
dont_buffer_diagnostics: bool = (false, parse_bool, [UNTRACKED], dont_buffer_diagnostics: bool = (false, parse_bool, [UNTRACKED],
"emit diagnostics rather than buffering (breaks NLL error downgrading, sorting)"), "emit diagnostics rather than buffering (breaks NLL error downgrading, sorting) \
(default: no)"),
polonius: bool = (false, parse_bool, [UNTRACKED], polonius: bool = (false, parse_bool, [UNTRACKED],
"enable polonius-based borrow-checker"), "enable polonius-based borrow-checker (default: no)"),
thinlto: Option<bool> = (None, parse_opt_bool, [TRACKED], thinlto: Option<bool> = (None, parse_opt_bool, [TRACKED],
"enable ThinLTO when possible"), "enable ThinLTO when possible"),
inline_in_all_cgus: Option<bool> = (None, parse_opt_bool, [TRACKED], inline_in_all_cgus: Option<bool> = (None, parse_opt_bool, [TRACKED],
@ -874,12 +881,12 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"choose the TLS model to use (`rustc --print tls-models` for details)"), "choose the TLS model to use (`rustc --print tls-models` for details)"),
saturating_float_casts: bool = (false, parse_bool, [TRACKED], saturating_float_casts: bool = (false, parse_bool, [TRACKED],
"make float->int casts UB-free: numbers outside the integer type's range are clipped to \ "make float->int casts UB-free: numbers outside the integer type's range are clipped to \
the max/min integer respectively, and NaN is mapped to 0"), the max/min integer respectively, and NaN is mapped to 0 (default: no)"),
human_readable_cgu_names: bool = (false, parse_bool, [TRACKED], human_readable_cgu_names: bool = (false, parse_bool, [TRACKED],
"generate human-readable, predictable names for codegen units"), "generate human-readable, predictable names for codegen units (default: no)"),
dep_info_omit_d_target: bool = (false, parse_bool, [TRACKED], dep_info_omit_d_target: bool = (false, parse_bool, [TRACKED],
"in dep-info output, omit targets for tracking dependencies of the dep-info files \ "in dep-info output, omit targets for tracking dependencies of the dep-info files \
themselves"), themselves (default: no)"),
unpretty: Option<String> = (None, parse_unpretty, [UNTRACKED], unpretty: Option<String> = (None, parse_unpretty, [UNTRACKED],
"present the input source, unstable (and less-pretty) variants; "present the input source, unstable (and less-pretty) variants;
valid types are any of the types for `--pretty`, as well as: valid types are any of the types for `--pretty`, as well as:
@ -894,21 +901,22 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
// preserving that temporarily, but we're likely to switch the default // preserving that temporarily, but we're likely to switch the default
// soon. // soon.
run_dsymutil: bool = (true, parse_bool, [TRACKED], run_dsymutil: bool = (true, parse_bool, [TRACKED],
"run `dsymutil` and delete intermediate object files"), "if on Mac, run `dsymutil` and delete intermediate object files (default: yes)"),
ui_testing: bool = (false, parse_bool, [UNTRACKED], ui_testing: bool = (false, parse_bool, [UNTRACKED],
"format compiler diagnostics in a way that's better suitable for UI testing"), "emit compiler diagnostics in a form suitable for UI testing (default: no)"),
embed_bitcode: bool = (false, parse_bool, [TRACKED], embed_bitcode: bool = (false, parse_bool, [TRACKED],
"embed LLVM bitcode in object files"), "embed LLVM bitcode in object files (default: no)"),
strip_debuginfo_if_disabled: bool = (false, parse_bool, [TRACKED], strip_debuginfo_if_disabled: bool = (false, parse_bool, [TRACKED],
"tell the linker to strip debuginfo when building without debuginfo enabled"), "tell the linker to strip debuginfo when building without debuginfo enabled \
(default: no)"),
share_generics: Option<bool> = (None, parse_opt_bool, [TRACKED], share_generics: Option<bool> = (None, parse_opt_bool, [TRACKED],
"make the current crate share its generic instantiations"), "make the current crate share its generic instantiations"),
no_parallel_llvm: bool = (false, parse_bool, [UNTRACKED], no_parallel_llvm: bool = (false, parse_bool, [UNTRACKED],
"don't run LLVM in parallel (while keeping codegen-units and ThinLTO)"), "run LLVM in non-parallel mode (while keeping codegen-units and ThinLTO) (default: no)"),
no_leak_check: bool = (false, parse_bool, [UNTRACKED], no_leak_check: bool = (false, parse_bool, [UNTRACKED],
"disables the 'leak check' for subtyping; unsound, but useful for tests"), "disable the 'leak check' for subtyping; unsound, but useful for tests (default: no)"),
no_interleave_lints: bool = (false, parse_bool, [UNTRACKED], no_interleave_lints: bool = (false, parse_bool, [UNTRACKED],
"don't interleave execution of lints; allows benchmarking individual lints"), "execute lints separately; allows benchmarking individual lints (default: no)"),
crate_attr: Vec<String> = (Vec::new(), parse_string_push, [TRACKED], crate_attr: Vec<String> = (Vec::new(), parse_string_push, [TRACKED],
"inject the given attribute in the crate"), "inject the given attribute in the crate"),
self_profile: SwitchWithOptPath = (SwitchWithOptPath::Disabled, self_profile: SwitchWithOptPath = (SwitchWithOptPath::Disabled,
@ -916,18 +924,18 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"run the self profiler and output the raw event data"), "run the self profiler and output the raw event data"),
// keep this in sync with the event filter names in librustc_data_structures/profiling.rs // keep this in sync with the event filter names in librustc_data_structures/profiling.rs
self_profile_events: Option<Vec<String>> = (None, parse_opt_comma_list, [UNTRACKED], self_profile_events: Option<Vec<String>> = (None, parse_opt_comma_list, [UNTRACKED],
"specifies which kinds of events get recorded by the self profiler; "specify the events recorded by the self profiler;
for example: `-Z self-profile-events=default,query-keys` for example: `-Z self-profile-events=default,query-keys`
all options: none, all, default, generic-activity, query-provider, query-cache-hit all options: none, all, default, generic-activity, query-provider, query-cache-hit
query-blocked, incr-cache-load, query-keys, function-args, args, llvm"), query-blocked, incr-cache-load, query-keys, function-args, args, llvm"),
emit_stack_sizes: bool = (false, parse_bool, [UNTRACKED], emit_stack_sizes: bool = (false, parse_bool, [UNTRACKED],
"emits a section containing stack size metadata"), "emit a section containing stack size metadata (default: no)"),
plt: Option<bool> = (None, parse_opt_bool, [TRACKED], plt: Option<bool> = (None, parse_opt_bool, [TRACKED],
"whether to use the PLT when calling into shared libraries; "whether to use the PLT when calling into shared libraries;
only has effect for PIC code on systems with ELF binaries only has effect for PIC code on systems with ELF binaries
(default: PLT is disabled if full relro is enabled)"), (default: PLT is disabled if full relro is enabled)"),
merge_functions: Option<MergeFunctions> = (None, parse_merge_functions, [TRACKED], merge_functions: Option<MergeFunctions> = (None, parse_merge_functions, [TRACKED],
"control the operation of the MergeFunctions LLVM pass, taking "control the operation of the MergeFunctions LLVM pass, taking \
the same values as the target option of the same name"), the same values as the target option of the same name"),
allow_features: Option<Vec<String>> = (None, parse_opt_comma_list, [TRACKED], allow_features: Option<Vec<String>> = (None, parse_opt_comma_list, [TRACKED],
"only allow the listed language features to be enabled in code (space separated)"), "only allow the listed language features to be enabled in code (space separated)"),
@ -935,22 +943,24 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
parse_symbol_mangling_version, [TRACKED], parse_symbol_mangling_version, [TRACKED],
"which mangling version to use for symbol names"), "which mangling version to use for symbol names"),
binary_dep_depinfo: bool = (false, parse_bool, [TRACKED], binary_dep_depinfo: bool = (false, parse_bool, [TRACKED],
"include artifacts (sysroot, crate dependencies) used during compilation in dep-info"), "include artifacts (sysroot, crate dependencies) used during compilation in dep-info \
(default: no)"),
insert_sideeffect: bool = (false, parse_bool, [TRACKED], insert_sideeffect: bool = (false, parse_bool, [TRACKED],
"fix undefined behavior when a thread doesn't eventually make progress \ "fix undefined behavior when a thread doesn't eventually make progress \
(such as entering an empty infinite loop) by inserting llvm.sideeffect"), (such as entering an empty infinite loop) by inserting llvm.sideeffect \
(default: no)"),
deduplicate_diagnostics: bool = (true, parse_bool, [UNTRACKED], deduplicate_diagnostics: bool = (true, parse_bool, [UNTRACKED],
"deduplicate identical diagnostics"), "deduplicate identical diagnostics (default: yes)"),
control_flow_guard: CFGuard = (CFGuard::Disabled, parse_cfguard, [UNTRACKED], control_flow_guard: CFGuard = (CFGuard::Disabled, parse_cfguard, [UNTRACKED],
"use Windows Control Flow Guard (`disabled`, `nochecks` or `checks`)"), "use Windows Control Flow Guard (`disabled`, `nochecks` or `checks`)"),
no_link: bool = (false, parse_bool, [TRACKED], no_link: bool = (false, parse_bool, [TRACKED],
"compile without linking"), "compile without linking (default: no)"),
link_only: bool = (false, parse_bool, [TRACKED], link_only: bool = (false, parse_bool, [TRACKED],
"link the `.rlink` file generated by `-Z no-link`"), "link the `.rlink` file generated by `-Z no-link` (default: no)"),
new_llvm_pass_manager: bool = (false, parse_bool, [TRACKED], new_llvm_pass_manager: bool = (false, parse_bool, [TRACKED],
"use new LLVM pass manager"), "use new LLVM pass manager (default: no)"),
link_native_libraries: bool = (true, parse_bool, [UNTRACKED], link_native_libraries: bool = (true, parse_bool, [UNTRACKED],
"link native libraries in the linker invocation"), "link native libraries in the linker invocation (default: yes)"),
src_hash_algorithm: Option<SourceFileHashAlgorithm> = (None, parse_src_file_hash, [TRACKED], src_hash_algorithm: Option<SourceFileHashAlgorithm> = (None, parse_src_file_hash, [TRACKED],
"hash algorithm of source files in debug info (`md5`, or `sha1`)"), "hash algorithm of source files in debug info (`md5`, or `sha1`)"),
} }