rustdoc: save target modifiers
`rustdoc` was filling a `target_modifiers` variable, but it was not using the result. In turn, that means that trying to use a dependency that set a target modifier fails. For instance, running: ```sh 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)] ' | RUSTC_BOOTSTRAP=1 rustdoc --edition=2021 --target=aarch64-unknown-none-softfloat --sysroot=/dev/null -Zfixed-x18 --extern core=libcore.rmeta - ``` will fail with: ```text 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 ``` Thus save the targets modifiers in `Options` to then pass it to the session options, so that eventually the diff can be performed as expected in `report_incompatible_target_modifiers()`. Fixes: https://github.com/rust-lang/rust/issues/144521 Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
@@ -173,6 +173,9 @@ pub(crate) struct Options {
|
||||
|
||||
/// Arguments to be used when compiling doctests.
|
||||
pub(crate) doctest_build_args: Vec<String>,
|
||||
|
||||
/// Target modifiers.
|
||||
pub(crate) target_modifiers: BTreeMap<OptionsTargetModifiers, String>,
|
||||
}
|
||||
|
||||
impl fmt::Debug for Options {
|
||||
@@ -846,6 +849,7 @@ impl Options {
|
||||
unstable_features,
|
||||
expanded_args: args,
|
||||
doctest_build_args,
|
||||
target_modifiers,
|
||||
};
|
||||
let render_options = RenderOptions {
|
||||
output,
|
||||
|
||||
@@ -214,6 +214,7 @@ pub(crate) fn create_config(
|
||||
scrape_examples_options,
|
||||
expanded_args,
|
||||
remap_path_prefix,
|
||||
target_modifiers,
|
||||
..
|
||||
}: RustdocOptions,
|
||||
render_options: &RenderOptions,
|
||||
@@ -277,6 +278,7 @@ pub(crate) fn create_config(
|
||||
} else {
|
||||
OutputTypes::new(&[])
|
||||
},
|
||||
target_modifiers,
|
||||
..Options::default()
|
||||
};
|
||||
|
||||
|
||||
7
tests/run-make/rustdoc-target-modifiers/c.rs
Normal file
7
tests/run-make/rustdoc-target-modifiers/c.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
#![allow(internal_features)]
|
||||
#![feature(lang_items, no_core)]
|
||||
#![no_core]
|
||||
|
||||
fn f() {
|
||||
d::f();
|
||||
}
|
||||
12
tests/run-make/rustdoc-target-modifiers/d.rs
Normal file
12
tests/run-make/rustdoc-target-modifiers/d.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
#![allow(internal_features)]
|
||||
#![feature(lang_items, no_core)]
|
||||
#![no_core]
|
||||
|
||||
#[lang = "pointee_sized"]
|
||||
pub trait PointeeSized {}
|
||||
#[lang = "meta_sized"]
|
||||
pub trait MetaSized: PointeeSized {}
|
||||
#[lang = "sized"]
|
||||
pub trait Sized: MetaSized {}
|
||||
|
||||
pub fn f() {}
|
||||
28
tests/run-make/rustdoc-target-modifiers/rmake.rs
Normal file
28
tests/run-make/rustdoc-target-modifiers/rmake.rs
Normal file
@@ -0,0 +1,28 @@
|
||||
//! Test that target modifiers are taken into account by `rustdoc`.
|
||||
//!
|
||||
//! Otherwise, `rustdoc` errors when trying to generate documentation
|
||||
//! using dependencies (e.g. `core`) that set a target modifier.
|
||||
//!
|
||||
//! Please see https://github.com/rust-lang/rust/issues/144521.
|
||||
|
||||
use run_make_support::{rustc, rustdoc};
|
||||
|
||||
fn main() {
|
||||
rustc()
|
||||
.input("d.rs")
|
||||
.edition("2024")
|
||||
.crate_type("rlib")
|
||||
.emit("metadata")
|
||||
.sysroot("/dev/null")
|
||||
.target("aarch64-unknown-none-softfloat")
|
||||
.arg("-Zfixed-x18")
|
||||
.run();
|
||||
|
||||
rustdoc()
|
||||
.input("c.rs")
|
||||
.crate_type("rlib")
|
||||
.extern_("d", "libd.rmeta")
|
||||
.target("aarch64-unknown-none-softfloat")
|
||||
.arg("-Zfixed-x18")
|
||||
.run();
|
||||
}
|
||||
Reference in New Issue
Block a user