about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustdoc/config.rs4
-rw-r--r--src/librustdoc/core.rs2
-rw-r--r--tests/run-make/rustdoc-target-modifiers/c.rs7
-rw-r--r--tests/run-make/rustdoc-target-modifiers/d.rs12
-rw-r--r--tests/run-make/rustdoc-target-modifiers/rmake.rs28
5 files changed, 53 insertions, 0 deletions
diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs
index 986390dbaa0..57456e906de 100644
--- a/src/librustdoc/config.rs
+++ b/src/librustdoc/config.rs
@@ -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,
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index bd57bb21e63..e89733b2f6d 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -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()
     };
 
diff --git a/tests/run-make/rustdoc-target-modifiers/c.rs b/tests/run-make/rustdoc-target-modifiers/c.rs
new file mode 100644
index 00000000000..287d0bbd725
--- /dev/null
+++ b/tests/run-make/rustdoc-target-modifiers/c.rs
@@ -0,0 +1,7 @@
+#![allow(internal_features)]
+#![feature(lang_items, no_core)]
+#![no_core]
+
+fn f() {
+    d::f();
+}
diff --git a/tests/run-make/rustdoc-target-modifiers/d.rs b/tests/run-make/rustdoc-target-modifiers/d.rs
new file mode 100644
index 00000000000..6cbff06079e
--- /dev/null
+++ b/tests/run-make/rustdoc-target-modifiers/d.rs
@@ -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() {}
diff --git a/tests/run-make/rustdoc-target-modifiers/rmake.rs b/tests/run-make/rustdoc-target-modifiers/rmake.rs
new file mode 100644
index 00000000000..ee522501fd2
--- /dev/null
+++ b/tests/run-make/rustdoc-target-modifiers/rmake.rs
@@ -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();
+}