about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2022-04-04 15:17:55 +0200
committerGuillaume Gomez <guillaume.gomez@huawei.com>2022-04-04 17:36:56 +0200
commitbf2c3b0455ba0e7d747f271383ee8ceabd9b6392 (patch)
treef1444d4ed3c3cda4283ba625a72bc38efa6af5a9
parent2ed6786404be276874fbcc7c3540f3237a87e0f3 (diff)
downloadrust-bf2c3b0455ba0e7d747f271383ee8ceabd9b6392.tar.gz
rust-bf2c3b0455ba0e7d747f271383ee8ceabd9b6392.zip
Fix ICE in rustdoc intra doc links when trying to get traits in scope for a private module
-rw-r--r--src/librustdoc/lib.rs8
-rw-r--r--src/librustdoc/passes/collect_intra_doc_links/early.rs5
2 files changed, 11 insertions, 2 deletions
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index f59222b780d..1d7a790bdb7 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -771,6 +771,7 @@ fn main_options(options: config::Options) -> MainResult {
     let externs = options.externs.clone();
     let render_options = options.render_options.clone();
     let scrape_examples_options = options.scrape_examples_options.clone();
+    let document_private = options.render_options.document_private;
     let config = core::create_config(options);
 
     interface::create_compiler_and_run(config, |compiler| {
@@ -791,7 +792,12 @@ fn main_options(options: config::Options) -> MainResult {
             let (resolver, resolver_caches) = {
                 let (krate, resolver, _) = &*abort_on_err(queries.expansion(), sess).peek();
                 let resolver_caches = resolver.borrow_mut().access(|resolver| {
-                    collect_intra_doc_links::early_resolve_intra_doc_links(resolver, krate, externs)
+                    collect_intra_doc_links::early_resolve_intra_doc_links(
+                        resolver,
+                        krate,
+                        externs,
+                        document_private,
+                    )
                 });
                 (resolver.clone(), resolver_caches)
             };
diff --git a/src/librustdoc/passes/collect_intra_doc_links/early.rs b/src/librustdoc/passes/collect_intra_doc_links/early.rs
index 75e952c5122..d712ec8aa6a 100644
--- a/src/librustdoc/passes/collect_intra_doc_links/early.rs
+++ b/src/librustdoc/passes/collect_intra_doc_links/early.rs
@@ -22,6 +22,7 @@ crate fn early_resolve_intra_doc_links(
     resolver: &mut Resolver<'_>,
     krate: &ast::Crate,
     externs: Externs,
+    document_private_items: bool,
 ) -> ResolverCaches {
     let mut loader = IntraLinkCrateLoader {
         resolver,
@@ -30,6 +31,7 @@ crate fn early_resolve_intra_doc_links(
         traits_in_scope: Default::default(),
         all_traits: Default::default(),
         all_trait_impls: Default::default(),
+        document_private_items,
     };
 
     // Because of the `crate::` prefix, any doc comment can reference
@@ -66,6 +68,7 @@ struct IntraLinkCrateLoader<'r, 'ra> {
     traits_in_scope: DefIdMap<Vec<TraitCandidate>>,
     all_traits: Vec<DefId>,
     all_trait_impls: Vec<DefId>,
+    document_private_items: bool,
 }
 
 impl IntraLinkCrateLoader<'_, '_> {
@@ -175,7 +178,7 @@ impl IntraLinkCrateLoader<'_, '_> {
         }
 
         for child in self.resolver.module_children_or_reexports(module_id) {
-            if child.vis == Visibility::Public {
+            if child.vis == Visibility::Public || self.document_private_items {
                 if let Some(def_id) = child.res.opt_def_id() {
                     self.add_traits_in_parent_scope(def_id);
                 }