diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 3e7196fa7fa03..9a2319f6e379d 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -1852,6 +1852,10 @@ impl Span { self.0 } + crate fn is_dummy(&self) -> bool { + self.0.is_dummy() + } + crate fn filename(&self, sess: &Session) -> FileName { sess.source_map().span_to_filename(self.0) } diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index f5eb92c1bb5aa..7ca355ed11cc7 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1638,6 +1638,9 @@ impl Context<'_> { /// may happen, for example, with externally inlined items where the source /// of their crate documentation isn't known. fn src_href(&self, item: &clean::Item) -> Option { + if item.source.is_dummy() { + return None; + } let mut root = self.root_path(); let mut path = String::new(); let cnum = item.source.cnum(self.sess()); diff --git a/src/test/rustdoc/src-links-auto-impls.rs b/src/test/rustdoc/src-links-auto-impls.rs new file mode 100644 index 0000000000000..a1d183df0f1f2 --- /dev/null +++ b/src/test/rustdoc/src-links-auto-impls.rs @@ -0,0 +1,12 @@ +#![crate_name = "foo"] + +// @has foo/struct.Unsized.html +// @has - '//h3[@id="impl-Sized"]/code' 'impl !Sized for Unsized' +// @!has - '//h3[@id="impl-Sized"]/a[@class="srclink"]' '[src]' +// @has - '//h3[@id="impl-Sync"]/code' 'impl Sync for Unsized' +// @!has - '//h3[@id="impl-Sync"]/a[@class="srclink"]' '[src]' +// @has - '//h3[@id="impl-Any"]/code' 'impl Any for T' +// @has - '//h3[@id="impl-Any"]/a[@class="srclink"]' '[src]' +pub struct Unsized { + data: [u8], +}