about summary refs log tree commit diff
path: root/src/librustdoc/clean/inline.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-10-31 15:40:56 +0000
committerbors <bors@rust-lang.org>2022-10-31 15:40:56 +0000
commitd939e5a3e5eb34dd1e828b9ad244ee6e6a0a989b (patch)
tree0189c6207ebdb209cb730de78e1adb0d14e34155 /src/librustdoc/clean/inline.rs
parent90b3882115c9c499b67824b89b641b51f5c0c40d (diff)
parent4bf5437062ea7bdb9210221ed926776b9086ccba (diff)
downloadrust-d939e5a3e5eb34dd1e828b9ad244ee6e6a0a989b.tar.gz
rust-d939e5a3e5eb34dd1e828b9ad244ee6e6a0a989b.zip
Auto merge of #103804 - Mark-Simulacrum:stable-next, r=Mark-Simulacrum
[stable] 1.67.0 release

Last minute backports:

* rustdoc: add support for incoherent impls on structs and traits #103746

r? `@ghost`
Diffstat (limited to 'src/librustdoc/clean/inline.rs')
-rw-r--r--src/librustdoc/clean/inline.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs
index c8aa51c3a49..df0e9f7cc8c 100644
--- a/src/librustdoc/clean/inline.rs
+++ b/src/librustdoc/clean/inline.rs
@@ -296,6 +296,21 @@ pub(crate) fn build_impls(
     for &did in tcx.inherent_impls(did).iter() {
         build_impl(cx, parent_module, did, attrs, ret);
     }
+
+    // This pretty much exists expressly for `dyn Error` traits that exist in the `alloc` crate.
+    // See also:
+    //
+    // * https://github.com/rust-lang/rust/issues/103170 — where it didn't used to get documented
+    // * https://github.com/rust-lang/rust/pull/99917 — where the feature got used
+    // * https://github.com/rust-lang/rust/issues/53487 — overall tracking issue for Error
+    if tcx.has_attr(did, sym::rustc_has_incoherent_inherent_impls) {
+        use rustc_middle::ty::fast_reject::SimplifiedTypeGen::*;
+        let type_ =
+            if tcx.is_trait(did) { TraitSimplifiedType(did) } else { AdtSimplifiedType(did) };
+        for &did in tcx.incoherent_impls(type_) {
+            build_impl(cx, parent_module, did, attrs, ret);
+        }
+    }
 }
 
 /// `parent_module` refers to the parent of the re-export, not the original item