`rustdoc +nightly -Zhelp` shows `rustc` unstable-options
Open
Nobody has claimed this yet.
A-CLI
C-bug
T-rustdoc
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
I tried this:
$ rustdoc +nightly -Zhelp
I expected to see this happen: I get documentation for unstable rustdoc flags
Instead, this happened: I get documentation for unstable rustc flags
$ rustdoc +nightly -Zhelp
Available options:
-Z allow-features=val -- only allow the listed language features to be enabled in code (comma separated)
-Z always-encode-mir=val -- encode MIR of all functions into the crate metadata (default: no)
-Z assert-incr-state=val -- assert that the incremental cache is in given state: either `loaded` or `not-loaded`.
-Z assume-incomplete-release=val -- make cfg(version) treat the current version as incomplete (default: no)
-Z autodiff=val -- a list of autodiff flags to enable
Mandatory setting:
`=Enable`
Optional extra settings:
`=PrintTA`
`=PrintAA`
`=PrintPerf`
`=PrintSteps`
`=PrintModBefore`
`=PrintModAfter`
`=PrintModFinal`
`=PrintPasses`,
`=NoPostopt`
`=LooseTypes`
`=Inline`
Multiple options can be combined with commas.
-Z binary-dep-depinfo=val -- include artifacts (sysroot, crate dependencies) used during compilation in dep-info (default: no)
-Z box-noalias=val -- emit noalias metadata for box (default: yes)
-Z branch-protection=val -- set options for branch target identification and pointer authentication on AArch64
-Z build-sdylib-interface=val -- whether the stable interface is being built
-Z cf-protection=val -- instrument control-flow architecture protection
-Z check-cfg-all-expected=val -- show all expected values in check-cfg diagnostics (default: no)
-Z checksum-hash-algorithm=val -- hash algorithm of source files used to check freshness in cargo (`blake3` or `sha256`)
-Z codegen-backend=val -- the backend to use
-Z combine-cgu=val -- combine CGUs into a single one
-Z contract-checks=val -- emit runtime checks for contract pre- and post-conditions (default: no)
-Z coverage-options=val -- control details of coverage instrumentation
-Z crate-attr=val -- inject the given attribute in the crate
-Z cross-crate-inline-threshold=val -- threshold to allow cross crate inlining of functions
-Z debug-info-for-profiling=val -- emit discriminators and other data necessary for AutoFDO
-Z debug-info-type-line-numbers=val -- emit type and line information for additional data types (default: no)
-Z debuginfo-compression=val -- compress debug info sections (none, zlib, zstd, default: none)
-Z deduplicate-diagnostics=val -- deduplicate identical diagnostics (default: yes)
-Z default-visibility=val -- overrides the `default_visibility` setting of the target
-Z dep-info-omit-d-target=val -- in dep-info output, omit targets for tracking dependencies of the dep-info files themselves (default: no)
-Z direct-access-external-data=val -- Direct or use GOT indirect to reference external data symbols
-Z dual-proc-macros=val -- load proc macros for both target and host, but only link to the target (default: no)
-Z dump-dep-graph=val -- dump the dependency graph to $RUST_DEP_GRAPH (default: /tmp/dep_graph.gv) (default: no)
-Z dump-mir=val -- dump MIR state to file.
`val` is used to select which passes and functions to dump. For example:
`all` matches all passes and functions,
`foo` matches all passes for functions whose name contains 'foo',
`foo & ConstProp` only the 'ConstProp' pass for function names containing 'foo',
`foo | bar` all passes for function names containing 'foo' or 'bar'.
-Z dump-mir-dataflow=val -- in addition to `.mir` files, create graphviz `.dot` files with dataflow results (default: no)
-Z dump-mir-dir=val -- the directory the MIR is dumped into (default: `mir_dump`)
-Z dump-mir-exclude-alloc-bytes=val -- exclude the raw bytes of allocations when dumping MIR (used in tests) (default: no)
-Z dump-mir-exclude-pass-number=val -- exclude the pass number when dumping MIR (used in tests) (default: no)
-Z dump-mir-graphviz=val -- in addition to `.mir` files, create graphviz `.dot` files (default: no)
-Z dump-mono-stats=val -- output statistics about monomorphization collection
-Z dump-mono-stats-format=val -- the format to use for -Z dump-mono-stats (`markdown` (default) or `json`)
-Z dwarf-version=val -- version of DWARF debug information to emit (default: 2 or 4, depending on platform)
-Z dylib-lto=val -- enables LTO for dylib crate type
-Z eagerly-emit-delayed-bugs=val -- emit delayed bugs eagerly as errors instead of stashing them and emitting them only if an error has not been emitted
-Z ehcont-guard=val -- generate Windows EHCont Guard tables
-Z embed-metadata=val -- embed metadata in rlibs and dylibs (default: yes)
-Z embed-source=val -- embed source text in DWARF debug sections (default: no)
-Z emit-stack-sizes=val -- emit a section containing stack size metadata (default: no)
-Z emit-thin-lto=val -- emit the bc module with thin LTO info (default: yes)
-Z emscripten-wasm-eh=val -- Use WebAssembly error handling for wasm32-unknown-emscripten
-Z enforce-type-length-limit=val -- enforce the type length limit when monomorphizing instances in codegen
-Z experimental-default-bounds=val -- enable default bounds for experimental group of auto traits
-Z export-executable-symbols=val -- export symbols from executables, as if they were dynamic libraries
-Z external-clangrt=val -- rely on user specified linker commands to find clangrt
-Z extra-const-ub-checks=val -- turns on more checks to detect const UB, which can be slow (default: no)
-Z fewer-names=val -- reduce memory use by retaining fewer names within compilation artifacts (LLVM-IR) (default: no)
-Z fixed-x18=val -- make the x18 register reserved on AArch64 (default: no)
-Z flatten-format-args=val -- flatten nested format_args!() and literals into a simplified format_args!() call (default: yes)
-Z fmt-debug=val -- how detailed `#[derive(Debug)]` should be. `full` prints types recursively, `shallow` prints only type names, `none` prints nothing and disables `{:?}`. (default: `full`)
-Z force-unstable-if-unmarked=val -- force all crates to be `rustc_private` unstable (default: no)
-Z function-return=val -- replace returns with jumps to `__x86_return_thunk` (default: `keep`)
-Z function-sections=val -- whether each function should go in its own section
-Z future-incompat-test=val -- forces all lints to be future incompatible, used for internal testing (default: no)
-Z graphviz-dark-mode=val -- use dark-themed colors in graphviz output (default: no)
-Z graphviz-font=val -- use the given `fontname` in graphviz output; can be overridden by setting environment variable `RUSTC_GRAPHVIZ_FONT` (default: `Courier, monospace`)
-Z has-thread-local=val -- explicitly enable the `cfg(target_thread_local)` directive
-Z human-readable-cgu-names=val -- generate human-readable, predictable names for codegen units (default: no)
-Z identify-regions=val -- display unnamed regions as `'<id>`, using a non-ident unique id (default: no)
-Z ignore-directory-in-diagnostics-source-blocks=val -- do not display the source code block in diagnostics for files in the directory
-Z incremental-ignore-spans=val -- ignore spans during ICH computation -- used for testing (default: no)
-Z incremental-info=val -- print high-level information about incremental reuse (or the lack thereof) (default: no)
-Z incremental-verify-ich=val -- verify extended properties for incr. comp. (default: no):
- hashes of green query instances
- hash collisions of query keys
- hash collisions when creating dep-nodes
-Z inline-llvm=val -- enable LLVM inlining (default: yes)
-Z inline-mir=val -- enable MIR inlining (default: no)
-Z inline-mir-forwarder-threshold=val -- inlining threshold when the caller is a simple forwarding function (default: 30)
-Z inline-mir-hint-threshold=val -- inlining threshold for functions with inline hint (default: 100)
-Z inline-mir-preserve-debug=val -- when MIR inlining, whether to preserve debug info for callee variables (default: preserve for debuginfo != None, otherwise remove)
-Z inline-mir-threshold=val -- a default MIR inlining threshold (default: 50)
-Z input-stats=val -- print some statistics about AST and HIR (default: no)
-Z instrument-mcount=val -- insert function instrument code for mcount-based tracing (default: no)
-Z instrument-xray=val -- insert function instrument code for XRay-based tracing (default: no)
Optional extra settings:
`=always`
`=never`
`=ignore-loops`
`=instruction-threshold=N`
`=skip-entry`
`=skip-exit`
Multiple options can be combined with commas.
-Z layout-seed=val -- seed layout randomization
-Z link-directives=val -- honor #[link] directives in the compiled crate (default: yes)
-Z link-native-libraries=val -- link native libraries in the linker invocation (default: yes)
-Z link-only=val -- link the `.rlink` file generated by `-Z no-link` (default: no)
-Z linker-features=val -- a comma-separated list of linker features to enable (+) or disable (-): `lld`
-Z lint-llvm-ir=val -- lint LLVM IR (default: no)
-Z lint-mir=val -- lint MIR before and after each transformation
-Z llvm-module-flag=val -- a list of module flags to pass to LLVM (space separated)
-Z llvm-plugins=val -- a list LLVM plugins to enable (space separated)
-Z llvm-time-trace=val -- generate JSON tracing data file from LLVM data (default: no)
-Z location-detail=val -- what location details should be tracked when using caller_location, either `none`, or a comma separated list of location details, for which valid options are `file`, `line`, and `column` (default: `file,line,column`)
-Z ls=val -- decode and print various parts of the crate metadata for a library crate (space separated)
-Z macro-backtrace=val -- show macro backtraces (default: no)
-Z macro-stats=val -- print some statistics about macro expansions (default: no)
-Z maximal-hir-to-mir-coverage=val -- save as much information as possible about the correspondence between MIR and HIR as source scopes (default: no)
-Z merge-functions=val -- control the operation of the MergeFunctions LLVM pass, taking the same values as the target option of the same name
-Z meta-stats=val -- gather metadata statistics (default: no)
-Z metrics-dir=val -- the directory metrics emitted by rustc are dumped into (implicitly enables default set of metrics)
-Z min-function-alignment=val -- align all functions to at least this many bytes. Must be a power of 2
-Z mir-emit-retag=val -- emit Retagging MIR statements, interpreted e.g., by miri; implies -Zmir-opt-level=0 (default: no)
-Z mir-enable-passes=val -- use like `-Zmir-enable-passes=+DestinationPropagation,-InstSimplify`. Forces the specified passes to be enabled, overriding all other checks. In particular, this will enable unsound (known-buggy and hence usually disabled) passes without further warning! Passes that are not specified are enabled or disabled by other flags as usual.
-Z mir-include-spans=val -- include extra comments in mir pretty printing, like line numbers and statement indices, details about types, etc. (boolean for all passes, 'nll' to enable in NLL MIR only, default: 'nll')
-Z mir-opt-level=val -- MIR optimization level (0-4; default: 1 in non optimized builds and 2 in optimized builds)
-Z mir-preserve-ub=val -- keep place mention statements and reads in trivial SwitchInt terminators, which are interpreted e.g., by miri; implies -Zmir-opt-level=0 (default: no)
-Z mir-strip-debuginfo=val -- Whether to remove some of the MIR debug info from methods. Default: None
-Z move-size-limit=val -- the size at which the `large_assignments` lint starts to be emitted
-Z mutable-noalias=val -- emit noalias metadata for mutable references (default: yes)
-Z namespaced-crates=val -- allow crates to be namespaced by other crates (default: no)
-Z next-solver=val -- enable and configure the next generation trait solver used by rustc
-Z nll-facts=val -- dump facts from NLL analysis into side files (default: no)
-Z nll-facts-dir=val -- the directory the NLL facts are dumped into (default: `nll-facts`)
-Z no-analysis=val -- parse and expand the source, but run no analysis
-Z no-codegen=val -- run all passes except codegen; no output
-Z no-generate-arange-section=val -- omit DWARF address ranges that give faster lookups
-Z no-implied-bounds-compat=val -- disable the compatibility version of the `implied_bounds_ty` query
-Z no-jump-tables=val -- disable the jump tables and lookup tables that can be generated from a switch case lowering
-Z no-leak-check=val -- disable the 'leak check' for subtyping; unsound, but useful for tests
-Z no-link=val -- compile without linking
-Z no-parallel-backend=val -- run LLVM in non-parallel mode (while keeping codegen-units and ThinLTO)
-Z no-profiler-runtime=val -- prevent automatic injection of the profiler_builtins crate
-Z no-steal-thir=val -- don't steal the THIR when we're done with it; useful for rustc drivers (default: no)
-Z no-trait-vptr=val -- disable generation of trait vptr in vtable for upcasting
-Z no-unique-section-names=val -- do not use unique names for text and data sections when -Z function-sections is used
-Z normalize-docs=val -- normalize associated items in rustdoc when generating documentation
-Z on-broken-pipe=val -- behavior of std::io::ErrorKind::BrokenPipe (SIGPIPE)
-Z oom=val -- panic strategy for out-of-memory handling
-Z osx-rpath-install-name=val -- pass `-install_name @rpath/...` to the macOS linker (default: no)
-Z packed-bundled-libs=val -- change rlib format to store native libraries as archives
-Z panic-abort-tests=val -- support compiling tests with panic=abort (default: no)
-Z panic-in-drop=val -- panic strategy for panics in drops
-Z parse-crate-root-only=val -- parse the crate root file only; do not parse other files, compile, assemble, or link (default: no)
-Z patchable-function-entry=val -- nop padding at function entry
-Z plt=val -- whether to use the PLT when calling into shared libraries;
only has effect for PIC code on systems with ELF binaries
(default: PLT is disabled if full relro is enabled on x86_64)
-Z polonius=val -- enable polonius-based borrow-checker (default: no)
-Z pre-link-arg=val -- a single extra argument to prepend the linker invocation (can be used several times)
-Z pre-link-args=val -- extra arguments to prepend to the linker invocation (space separated)
-Z precise-enum-drop-elaboration=val -- use a more precise version of drop elaboration for matches on enums (default: yes). This results in better codegen, but has caused miscompilations on some tier 2 platforms. See #77382 and #74551.
-Z print-codegen-stats=val -- print codegen statistics (default: no)
-Z print-llvm-passes=val -- print the LLVM optimization passes being run (default: no)
-Z print-mono-items=val -- print the result of the monomorphization collection pass (default: no)
-Z print-type-sizes=val -- print layout information for each type encountered (default: no)
-Z proc-macro-backtrace=val -- show backtraces for panics during proc-macro execution (default: no)
-Z proc-macro-execution-strategy=val -- how to run proc-macro code (default: same-thread)
-Z profile-closures=val -- profile size of closures
-Z profile-sample-use=val -- use the given `.prof` file for sampled profile-guided optimization (also known as AutoFDO)
-Z profiler-runtime=val -- name of the profiler runtime crate to automatically inject (default: `profiler_builtins`)
-Z query-dep-graph=val -- enable queries of the dependency graph for regression testing (default: no)
-Z randomize-layout=val -- randomize the layout of types (default: no)
-Z reg-struct-return=val -- On x86-32 targets, it overrides the default ABI to return small structs in registers.
It is UNSOUND to link together crates that use different values for this flag!
-Z regparm=val -- On x86-32 targets, setting this to N causes the compiler to pass N arguments in registers EAX, EDX, and ECX instead of on the stack for"C", "cdecl", and "stdcall" fn.It is UNSOUND to link together crates that use different values for this flag!
-Z relax-elf-relocations=val -- whether ELF relocations can be relaxed
-Z remap-cwd-prefix=val -- remap paths under the current working directory to this path prefix
-Z remap-path-scope=val -- remap path scope (default: all)
-Z remark-dir=val -- directory into which to write optimization remarks (if not specified, they will be written to standard error output)
-Z retpoline=val -- enables retpoline-indirect-branches and retpoline-indirect-calls target features (default: no)
-Z retpoline-external-thunk=val -- enables retpoline-external-thunk, retpoline-indirect-branches and retpoline-indirect-calls target features (default: no)
-Z sanitizer=val -- use a sanitizer
-Z sanitizer-cfi-canonical-jump-tables=val -- enable canonical jump tables (default: yes)
-Z sanitizer-cfi-generalize-pointers=val -- enable generalizing pointer types (default: no)
-Z sanitizer-cfi-normalize-integers=val -- enable normalizing integer types (default: no)
-Z sanitizer-dataflow-abilist=val -- additional ABI list files that control how shadow parameters are passed (comma separated)
-Z sanitizer-kcfi-arity=val -- enable KCFI arity indicator (default: no)
-Z sanitizer-memory-track-origins=val -- enable origins tracking in MemorySanitizer
-Z sanitizer-recover=val -- enable recovery for selected sanitizers
-Z saturating-float-casts=val -- 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 (default: yes)
-Z self-profile=val -- run the self profiler and output the raw event data
-Z self-profile-counter=val -- counter used by the self profiler (default: `wall-time`), one of:
`wall-time` (monotonic clock, i.e. `std::time::Instant`)
`instructions:u` (retired instructions, userspace-only)
`instructions-minus-irqs:u` (subtracting hardware interrupt counts for extra accuracy)
-Z self-profile-events=val -- specify the events recorded by the self profiler;
for example: `-Z self-profile-events=default,query-keys`
all options: none, all, default, generic-activity, query-provider, query-cache-hit
query-blocked, incr-cache-load, incr-result-hashing, query-keys, function-args, args, llvm, artifact-sizes
-Z share-generics=val -- make the current crate share its generic instantiations
-Z shell-argfiles=val -- allow argument files to be specified with POSIX "shell-style" argument quoting
-Z simulate-remapped-rust-src-base=val -- simulate the effect of remap-debuginfo = true at bootstrapping by remapping path to rust's source base directory. only meant for testing purposes
-Z small-data-threshold=val -- Set the threshold for objects to be stored in a "small data" section
-Z span-debug=val -- forward proc_macro::Span's `Debug` impl to `Span`
-Z span-free-formats=val -- exclude spans when debug-printing compiler state (default: no)
-Z split-dwarf-inlining=val -- provide minimal debug info in the object/executable to facilitate online symbolication/stack traces in the absence of .dwo/.dwp files when using Split DWARF
-Z split-dwarf-kind=val -- split dwarf variant (only if -Csplit-debuginfo is enabled and on relevant platform)
(default: `split`)
`split`: sections which do not require relocation are written into a DWARF object (`.dwo`)
file which is ignored by the linker
`single`: sections which do not require relocation are written into object file but ignored
by the linker
-Z split-lto-unit=val -- enable LTO unit splitting (default: no)
-Z src-hash-algorithm=val -- hash algorithm of source files in debug info (`md5`, `sha1`, or `sha256`)
-Z stack-protector=val -- control stack smash protection strategy (`rustc --print stack-protector-strategies` for details)
-Z staticlib-allow-rdylib-deps=val -- allow staticlibs to have rust dylib dependencies
-Z staticlib-prefer-dynamic=val -- prefer dynamic linking to static linking for staticlibs (default: no)
-Z strict-init-checks=val -- control if mem::uninitialized and mem::zeroed panic on more UB
-Z teach=val -- show extended diagnostic help (default: no)
-Z temps-dir=val -- the directory the intermediate files are written to
-Z terminal-urls=val -- use the OSC 8 hyperlink terminal specification to print hyperlinks in the compiler output
-Z thinlto=val -- enable ThinLTO when possible
-Z threads=val -- use a thread pool with N threads
-Z time-llvm-passes=val -- measure time of each LLVM pass (default: no)
-Z time-passes=val -- measure time of each rustc pass (default: no)
-Z time-passes-format=val -- the format to use for -Z time-passes (`text` (default) or `json`)
-Z tiny-const-eval-limit=val -- sets a tiny, non-configurable limit for const eval; useful for compiler tests
-Z tls-model=val -- choose the TLS model to use (`rustc --print tls-models` for details)
-Z trace-macros=val -- for every macro invocation, print its name and arguments (default: no)
-Z track-diagnostics=val -- tracks where in rustc a diagnostic was emitted
-Z translate-additional-ftl=val -- additional fluent translation to preferentially use (for testing translation)
-Z translate-directionality-markers=val -- emit directionality isolation markers in translated diagnostics
-Z translate-lang=val -- language identifier for diagnostic output
-Z translate-remapped-path-to-local-path=val -- translate remapped paths into local paths when possible (default: yes)
-Z trap-unreachable=val -- generate trap instructions for unreachable intrinsics (default: use target setting, usually yes)
-Z treat-err-as-bug=val -- treat the `val`th error that occurs as bug (default if not specified: 0 - don't treat errors as bugs. default if specified without a value: 1 - treat the first error as bug)
-Z trim-diagnostic-paths=val -- in diagnostics, use heuristics to shorten paths referring to items
-Z tune-cpu=val -- select processor to schedule for (`rustc --print target-cpus` for details)
-Z typing-mode-borrowck=val -- enable `TypingMode::Borrowck`, changing the way opaque types are handled during MIR borrowck
-Z ub-checks=val -- emit runtime checks for Undefined Behavior (default: -Cdebug-assertions)
-Z ui-testing=val -- emit compiler diagnostics in a form suitable for UI testing (default: no)
-Z uninit-const-chunk-threshold=val -- allow generating const initializers with mixed init/uninit chunks, and set the maximum number of chunks for which this is allowed (default: 16)
-Z unleash-the-miri-inside-of-you=val -- take the brakes off const evaluation. NOTE: this is unsound (default: no)
-Z unpretty=val -- present the input source, unstable (and less-pretty) variants;
`normal`, `identified`,
`expanded`, `expanded,identified`,
`expanded,hygiene` (with internal representations),
`ast-tree` (raw AST before expansion),
`ast-tree,expanded` (raw AST after expansion),
`hir` (the HIR), `hir,identified`,
`hir,typed` (HIR with types for each node),
`hir-tree` (dump the raw HIR),
`thir-tree`, `thir-flat`,
`mir` (the MIR), or `mir-cfg` (graphviz formatted MIR)
-Z unsound-mir-opts=val -- enable unsound and buggy MIR optimizations (default: no)
-Z unstable-options=val -- adds unstable command line options to rustc interface (default: no)
-Z use-ctors-section=val -- use legacy .ctors section for initializers rather than .init_array
-Z use-sync-unwind=val -- Generate sync unwind tables instead of async unwind tables (default: no)
-Z validate-mir=val -- validate MIR after each transformation
-Z verbose-asm=val -- add descriptive comments from LLVM to the assembly (may change behavior) (default: no)
-Z verbose-internals=val -- in general, enable more debug printouts (default: no)
-Z verify-llvm-ir=val -- verify LLVM IR (default: no)
-Z virtual-function-elimination=val -- enables dead virtual function elimination optimization. Requires `-Clto[=[fat,yes]]`
-Z wasi-exec-model=val -- whether to build a wasi command or reactor
-Z write-long-types-to-disk=val -- whether long type names should be written to files instead of being printed in errors
Meta
rustdoc 1.89.0-nightly (45acf54ee 2025-06-16)
binary: rustdoc
commit-hash: 45acf54eea118ed27927282b5e0bfdcd80b7987c
commit-date: 2025-06-16
host: x86_64-unknown-linux-gnu
release: 1.89.0-nightly
LLVM version: 20.1.5
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with rustdoc +nightly -Zhelp and compare the output with the expected rustdoc-specific unstable flags. Trace the rustdoc help and unstable-option handling until the rustc options enter the output. Done means the command lists rustdoc unstable flags instead of rustc unstable flags.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli, compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100