Skip to content

rustdoc cannot use dependencies with target modifiers #144521

@ojeda

Description

@ojeda

If one builds a dependency with a target modifier set, then rustdoc will fail to document a crate using that dependency.

Either rustdoc should skip checking target modifiers, or if it checks, then it should actually save the ones set. #133138 creates and fills a target_modifiers variable, but it is not used afterwards -- #144523 fixes that.

As a workaround, for older compilers, -Cunsafe-allow-abi-mismatch= can be used in rustdoc invocations.

This affects the Linux kernel when building the documentation with e.g. SCS enabled -- reported by Konrad Dybcio: https://lore.kernel.org/rust-for-linux/[email protected]/

Cc: @azhogin

I tried this code:

RUSTC_BOOTSTRAP=1 rustc --edition=2024 --target=aarch64-unknown-none-softfloat --sysroot=/dev/null --emit=metadata -Zfixed-x18 --crate-type rlib --crate-name core $(rustc --print sysroot)/lib/rustlib/src/rust/library/core/src/lib.rs

echo '#![allow(internal_features)]
#![feature(compiler_builtins)]
#![compiler_builtins]
#![no_builtins]
#![no_std]
' | RUSTC_BOOTSTRAP=1 rustdoc --edition=2021 --target=aarch64-unknown-none-softfloat --sysroot=/dev/null -Zfixed-x18 --extern core=libcore.rmeta -

I expected to see this happen: no error.

Instead, this happened: error:

error: mixing `-Zfixed-x18` will cause an ABI mismatch in crate `rust_out`
  |
  = help: the `-Zfixed-x18` flag modifies the ABI so Rust crates compiled with different values of this flag cannot be used together safely
  = note: unset `-Zfixed-x18` in this crate is incompatible with `-Zfixed-x18=` in dependency `core`
  = help: set `-Zfixed-x18=` in this crate or unset `-Zfixed-x18` in `core`
  = help: if you are sure this will not cause problems, you may use `-Cunsafe-allow-abi-mismatch=fixed-x18` to silence this error

Meta

rustc --version --verbose:

rustc 1.88.0 (6b00bc388 2025-06-23)

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions