about summary refs log tree commit diff
diff options
context:
space:
mode:
authorlcnr <rust@lcnr.de>2022-03-18 17:02:32 +0100
committerlcnr <rust@lcnr.de>2022-03-30 11:23:58 +0200
commitee62514b16b610870e001b14f15e7e71b15e54e7 (patch)
treebfd2796e23aefe2fe38ec675a40c5549c4a4eb61
parenta6153e8218e70e70f3c5d61adcb78d87d0e89152 (diff)
downloadrust-ee62514b16b610870e001b14f15e7e71b15e54e7.tar.gz
rust-ee62514b16b610870e001b14f15e7e71b15e54e7.zip
fix rustdoc wrt builtin impls switch
-rw-r--r--compiler/rustc_metadata/src/rmeta/decoder.rs19
-rw-r--r--compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs11
-rw-r--r--src/librustdoc/passes/collect_intra_doc_links/early.rs5
-rw-r--r--src/test/rustdoc/intra-doc/auxiliary/extern-builtin-type-impl-dep.rs (renamed from src/test/rustdoc/intra-doc/auxiliary/extern-lang-item-impl-dep.rs)5
-rw-r--r--src/test/rustdoc/intra-doc/auxiliary/my-core.rs4
-rw-r--r--src/test/rustdoc/intra-doc/extern-builtin-type-impl.rs (renamed from src/test/rustdoc/intra-doc/extern-lang-item-impl.rs)6
-rw-r--r--src/test/rustdoc/intra-doc/prim-methods-local.rs4
-rw-r--r--src/test/rustdoc/issue-23511.rs4
8 files changed, 35 insertions, 23 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs
index de8c0800ac1..7c5f6d4c62d 100644
--- a/compiler/rustc_metadata/src/rmeta/decoder.rs
+++ b/compiler/rustc_metadata/src/rmeta/decoder.rs
@@ -1033,11 +1033,13 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
     }
 
     /// Iterates over the language items in the given crate.
-    fn get_lang_items(self) -> impl Iterator<Item = (DefId, usize)> + 'a {
-        self.root
-            .lang_items
-            .decode(self)
-            .map(move |(def_index, index)| (self.local_def_id(def_index), index))
+    fn get_lang_items(self, tcx: TyCtxt<'tcx>) -> &'tcx [(DefId, usize)] {
+        tcx.arena.alloc_from_iter(
+            self.root
+                .lang_items
+                .decode(self)
+                .map(move |(def_index, index)| (self.local_def_id(def_index), index)),
+        )
     }
 
     /// Iterates over the diagnostic items in the given crate.
@@ -1343,6 +1345,13 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
         })
     }
 
+    fn get_all_incoherent_impls(self) -> impl Iterator<Item = DefId> + 'a {
+        self.cdata
+            .incoherent_impls
+            .values()
+            .flat_map(move |impls| impls.decode(self).map(move |idx| self.local_def_id(idx)))
+    }
+
     fn get_incoherent_impls(self, tcx: TyCtxt<'tcx>, simp: SimplifiedType) -> &'tcx [DefId] {
         if let Some(impls) = self.cdata.incoherent_impls.get(&simp) {
             tcx.arena.alloc_from_iter(impls.decode(self).map(|idx| self.local_def_id(idx)))
diff --git a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
index 7fac668f072..70358ae0e22 100644
--- a/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
+++ b/compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
@@ -223,7 +223,7 @@ provide! { <'tcx> tcx, def_id, other, cdata,
         tcx.arena.alloc_slice(&result)
     }
     defined_lib_features => { cdata.get_lib_features(tcx) }
-    defined_lang_items => { tcx.arena.alloc_from_iter(cdata.get_lang_items()) }
+    defined_lang_items => { cdata.get_lang_items(tcx) }
     diagnostic_items => { cdata.get_diagnostic_items() }
     missing_lang_items => { cdata.get_missing_lang_items(tcx) }
 
@@ -523,9 +523,12 @@ impl CStore {
         self.get_crate_data(cnum).get_inherent_impls()
     }
 
-    /// Decodes all lang items in the crate (for rustdoc).
-    pub fn lang_items_untracked(&self, cnum: CrateNum) -> impl Iterator<Item = DefId> + '_ {
-        self.get_crate_data(cnum).get_lang_items().map(|(def_id, _)| def_id)
+    /// Decodes all incoherent inherent impls in the crate (for rustdoc).
+    pub fn incoherent_impls_in_crate_untracked(
+        &self,
+        cnum: CrateNum,
+    ) -> impl Iterator<Item = DefId> + '_ {
+        self.get_crate_data(cnum).get_all_incoherent_impls()
     }
 }
 
diff --git a/src/librustdoc/passes/collect_intra_doc_links/early.rs b/src/librustdoc/passes/collect_intra_doc_links/early.rs
index 30636faf98c..75e952c5122 100644
--- a/src/librustdoc/passes/collect_intra_doc_links/early.rs
+++ b/src/librustdoc/passes/collect_intra_doc_links/early.rs
@@ -113,7 +113,8 @@ impl IntraLinkCrateLoader<'_, '_> {
                 Vec::from_iter(self.resolver.cstore().trait_impls_in_crate_untracked(cnum));
             let all_inherent_impls =
                 Vec::from_iter(self.resolver.cstore().inherent_impls_in_crate_untracked(cnum));
-            let all_lang_items = Vec::from_iter(self.resolver.cstore().lang_items_untracked(cnum));
+            let all_incoherent_impls =
+                Vec::from_iter(self.resolver.cstore().incoherent_impls_in_crate_untracked(cnum));
 
             // Querying traits in scope is expensive so we try to prune the impl and traits lists
             // using privacy, private traits and impls from other crates are never documented in
@@ -137,7 +138,7 @@ impl IntraLinkCrateLoader<'_, '_> {
                     self.add_traits_in_parent_scope(impl_def_id);
                 }
             }
-            for def_id in all_lang_items {
+            for def_id in all_incoherent_impls {
                 self.add_traits_in_parent_scope(def_id);
             }
 
diff --git a/src/test/rustdoc/intra-doc/auxiliary/extern-lang-item-impl-dep.rs b/src/test/rustdoc/intra-doc/auxiliary/extern-builtin-type-impl-dep.rs
index 87ae2f096bb..d9a08cb41b8 100644
--- a/src/test/rustdoc/intra-doc/auxiliary/extern-lang-item-impl-dep.rs
+++ b/src/test/rustdoc/intra-doc/auxiliary/extern-builtin-type-impl-dep.rs
@@ -1,7 +1,6 @@
 // no-prefer-dynamic
 
-#![feature(lang_items)]
-
+#![feature(lang_items, rustc_attrs)]
 #![crate_type = "rlib"]
 #![no_std]
 
@@ -15,9 +14,9 @@ impl core::ops::Deref for DerefsToF64 {
 }
 
 mod inner {
-    #[lang = "f64_runtime"]
     impl f64 {
         /// [f64::clone]
+        #[rustc_allow_incoherent_impl]
         pub fn method() {}
     }
 }
diff --git a/src/test/rustdoc/intra-doc/auxiliary/my-core.rs b/src/test/rustdoc/intra-doc/auxiliary/my-core.rs
index bb70073fc69..e22feb03ae6 100644
--- a/src/test/rustdoc/intra-doc/auxiliary/my-core.rs
+++ b/src/test/rustdoc/intra-doc/auxiliary/my-core.rs
@@ -1,12 +1,12 @@
-#![feature(no_core, lang_items, rustdoc_internals)]
+#![feature(no_core, lang_items, rustdoc_internals, rustc_attrs)]
 #![no_core]
+#![rustc_coherence_is_core]
 #![crate_type="rlib"]
 
 #[doc(primitive = "char")]
 /// Some char docs
 mod char {}
 
-#[lang = "char"]
 impl char {
     pub fn len_utf8(self) -> usize {
         42
diff --git a/src/test/rustdoc/intra-doc/extern-lang-item-impl.rs b/src/test/rustdoc/intra-doc/extern-builtin-type-impl.rs
index f64f886f076..7bb1ded3f3c 100644
--- a/src/test/rustdoc/intra-doc/extern-lang-item-impl.rs
+++ b/src/test/rustdoc/intra-doc/extern-builtin-type-impl.rs
@@ -2,10 +2,10 @@
 // comments. The doc link points to an associated item, so we check that traits in scope for that
 // link are populated.
 
-// aux-build:extern-lang-item-impl-dep.rs
+// aux-build:extern-builtin-type-impl-dep.rs
 
 #![no_std]
 
-extern crate extern_lang_item_impl_dep;
+extern crate extern_builtin_type_impl_dep;
 
-pub use extern_lang_item_impl_dep::DerefsToF64;
+pub use extern_builtin_type_impl_dep::DerefsToF64;
diff --git a/src/test/rustdoc/intra-doc/prim-methods-local.rs b/src/test/rustdoc/intra-doc/prim-methods-local.rs
index fd0b1b97c6e..79d8df04515 100644
--- a/src/test/rustdoc/intra-doc/prim-methods-local.rs
+++ b/src/test/rustdoc/intra-doc/prim-methods-local.rs
@@ -1,6 +1,7 @@
 #![deny(rustdoc::broken_intra_doc_links)]
-#![feature(no_core, lang_items, rustdoc_internals)]
+#![feature(no_core, lang_items, rustc_attrs, rustdoc_internals)]
 #![no_core]
+#![rustc_coherence_is_core]
 #![crate_type = "rlib"]
 
 // @has prim_methods_local/index.html
@@ -12,7 +13,6 @@
 #[doc(primitive = "char")]
 mod char {}
 
-#[lang = "char"]
 impl char {
     pub fn len_utf8(self) -> usize {
         42
diff --git a/src/test/rustdoc/issue-23511.rs b/src/test/rustdoc/issue-23511.rs
index 6d421f3c253..2d2a7908fb1 100644
--- a/src/test/rustdoc/issue-23511.rs
+++ b/src/test/rustdoc/issue-23511.rs
@@ -1,13 +1,13 @@
-#![feature(lang_items)]
+#![feature(rustc_attrs)]
 #![feature(rustdoc_internals)]
 #![no_std]
 
 pub mod str {
     #![doc(primitive = "str")]
 
-    #[lang = "str_alloc"]
     impl str {
         // @has search-index.js foo
+        #[rustc_allow_incoherent_impl]
         pub fn foo(&self) {}
     }
 }