Change:
appears on the current nightly's, even though it's not part of the (public) standard libraries. This appears to be , so maybe related to , cc Noticed by (assuming they use the same handle here and discord, if not, sorry :flushed:)
Relevant PRs (backtrace isn't really to blame here): ,
Maybe this should also skip the impl if there is no 'stability' attribute? ,
This is the default for everything not in the standard library. So it seems like the standard library needs special casing here. Maybe as simple as ?
Doesn't gimli get everything marked as unstable behind the rustc_private feature gate through a rustc flag?
MCVE: It doesn't require any external deps, just dummy crates included. The outermost crate is a fake std, realcore is fake core, gimli is fake gimli.

Discussion:
// reachable in rustdoc generated documentation if !did.is_local() { if let Some(traitref) = associated_trait { <del> if !cx.renderinfo.borrow().access_levels.is_public(traitref.def_id) { </del> <ins> let did = traitref.def_id; if !cx.renderinfo.borrow().access_levels.is_public(did) { </ins> return; } <del> } // Skip foreign unstable traits from lists of trait implementations and // such. This helps prevent dependencies of the standard library, for // example, from getting documented as "traits `u32` implements" which // isn't really too helpful. if let Some(trait_did) = associated_trait { if let Some(stab) = cx.tcx.lookup_stability(trait_did.def_id) { if stab.level.is_unstable() { </del> <ins> if let Some(stab) = tcx.lookup_stability(did) { if stab.level.is_unstable() && stab.feature == sym::rustc_private { </ins> return; } }

if !cx.renderinfo.borrow().access_levels.is_public(did) { return; } <ins> if let Some(stab) = tcx.lookup_stability(did) { if stab.level.is_unstable() && stab.feature == sym::rustc_private { return; } } </ins> } }

<ins> // aux-build:realcore.rs #![crate_name = "real_gimli"] #![feature(staged_api, extremely_unstable)] #![unstable(feature = "rustc_private", issue = "none")] extern crate realcore; #[unstable(feature = "rustc_private", issue = "none")] pub struct EndianSlice; #[unstable(feature = "rustc_private", issue = "none")] impl realcore::Deref for EndianSlice {} </ins>

<ins> #![crate_name = "realcore"] #![feature(staged_api)] #![unstable(feature = "extremely_unstable", issue = "none")] #[unstable(feature = "extremely_unstable_foo", issue = "none")] pub struct Foo {} #[unstable(feature = "extremely_unstable_foo", issue = "none")] pub trait Join {} #[unstable(feature = "extremely_unstable_foo", issue = "none")] impl Join for Foo {} #[stable(feature = "faked_deref", since = "1.47.0")] pub trait Deref {} </ins>

<ins> // ignore-tidy-linelength // aux-build:realcore.rs // aux-build:real_gimli.rs // Ensure unstably exported traits have their Implementors sections. #![crate_name = "foo"] #![feature(extremely_unstable_foo)] extern crate realcore; extern crate real_gimli; // issue #74672 // @!has foo/trait.Deref.html '//*[@id="impl-Deref-for-EndianSlice"]//code' 'impl Deref for EndianSlice' pub use realcore::Deref; // @has foo/trait.Join.html '//*[@id="impl-Join-for-Foo"]//code' 'impl Join for Foo' pub use realcore::Join; </ins>

if let Some(entry) = LINKCHECK_EXCEPTIONS.iter().find(|&(f, _)| file.ends_with(f)) { entry.1.contains(&link) } else { <ins> // FIXME(#63351): Concat trait in alloc/slice reexported in primitive page // // NOTE: This cannot be added to `LINKCHECK_EXCEPTIONS` because the resolved path // calculated in `check` function is outside `build/<triple>/doc` dir. // So the `strip_prefix` method just returns the old absolute broken path. if file.ends_with("std/primitive.slice.html") { if link.ends_with("primitive.slice.html") { return true; } } </ins> false } }