about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2022-08-02 14:48:23 -0700
committerMichael Howell <michael@notriddle.com>2022-08-02 14:48:23 -0700
commit8724ca3114f2babefeee7989eadbb7d156503f37 (patch)
treebad1752496b993df9336731667bd9b31b18ecaa0
parent225ac9efc10bfd4149fd6de3d09e70d6c2387a8b (diff)
downloadrust-8724ca3114f2babefeee7989eadbb7d156503f37.tar.gz
rust-8724ca3114f2babefeee7989eadbb7d156503f37.zip
rustdoc: avoid inlining foreigns with duplicate names
-rw-r--r--src/librustdoc/clean/mod.rs12
-rw-r--r--src/test/rustdoc/auxiliary/issue-99734-aux.rs4
-rw-r--r--src/test/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs16
3 files changed, 27 insertions, 5 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index cf03979a934..9251a7487a7 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -52,11 +52,13 @@ impl<'tcx> Clean<'tcx, Item> for DocModule<'tcx> {
     fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
         let mut items: Vec<Item> = vec![];
         let mut inserted = FxHashSet::default();
-        items.extend(
-            self.foreigns
-                .iter()
-                .map(|(item, renamed)| clean_maybe_renamed_foreign_item(cx, item, *renamed)),
-        );
+        items.extend(self.foreigns.iter().map(|(item, renamed)| {
+            let item = clean_maybe_renamed_foreign_item(cx, item, *renamed);
+            if let Some(name) = item.name {
+                inserted.insert((item.type_(), name));
+            }
+            item
+        }));
         items.extend(self.mods.iter().map(|x| {
             inserted.insert((ItemType::Module, x.name));
             x.clean(cx)
diff --git a/src/test/rustdoc/auxiliary/issue-99734-aux.rs b/src/test/rustdoc/auxiliary/issue-99734-aux.rs
index 8f1f1ec8967..234d55efb55 100644
--- a/src/test/rustdoc/auxiliary/issue-99734-aux.rs
+++ b/src/test/rustdoc/auxiliary/issue-99734-aux.rs
@@ -5,3 +5,7 @@ impl Option {
 
 /// [`Option::unwrap`]
 pub mod task {}
+
+extern "C" {
+    pub fn main() -> std::ffi::c_int;
+}
diff --git a/src/test/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs b/src/test/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs
new file mode 100644
index 00000000000..3208fea05b3
--- /dev/null
+++ b/src/test/rustdoc/issue-99734-multiple-foreigns-w-same-name.rs
@@ -0,0 +1,16 @@
+// aux-build:issue-99734-aux.rs
+// build-aux-docs
+// ignore-cross-compile
+
+#![crate_name = "foo"]
+
+#[macro_use]
+extern crate issue_99734_aux;
+
+pub use issue_99734_aux::*;
+
+// @count foo/index.html '//a[@class="fn"][@title="foo::main fn"]' 1
+
+extern "C" {
+    pub fn main() -> std::ffi::c_int;
+}