diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 08b696e65eb..ecbfc636314 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -55,9 +55,11 @@ pub(crate) fn clean_doc_module<'tcx>(doc: &DocModule<'tcx>, cx: &mut DocContext< } item })); - items.extend(doc.mods.iter().map(|x| { - inserted.insert((ItemType::Module, x.name)); - clean_doc_module(x, cx) + items.extend(doc.mods.iter().filter_map(|x| { + if !inserted.insert((ItemType::Module, x.name)) { + return None; + } + Some(clean_doc_module(x, cx)) })); // Split up imports from all other items. diff --git a/src/test/rustdoc/issue-83375-multiple-mods-w-same-name-doc-inline.rs b/src/test/rustdoc/issue-83375-multiple-mods-w-same-name-doc-inline.rs new file mode 100644 index 00000000000..f9a2c0954a7 --- /dev/null +++ b/src/test/rustdoc/issue-83375-multiple-mods-w-same-name-doc-inline.rs @@ -0,0 +1,15 @@ +#![crate_name = "foo"] + +pub mod sub { + pub struct Item; + + pub mod prelude { + pub use super::Item; + } +} + +// @count foo/index.html '//a[@class="mod"][@title="foo::prelude mod"]' 1 +pub mod prelude {} + +#[doc(inline)] +pub use sub::*;