Skip to content

Commit bf44a87

Browse files
authored
Rollup merge of #95645 - GuillaumeGomez:intra-doc-link-ice-traits-in-scope-primitive, r=jyn514
Fix intra doc link ICE when trying to get traits in scope for primitive Fixes #95633. I think ``@notriddle`` was the one who worked on this part of the code last so: r? ``@notriddle``
2 parents 2a7e7bd + 50cc0fa commit bf44a87

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

src/librustdoc/lib.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,7 @@ fn main_options(options: config::Options) -> MainResult {
771771
let externs = options.externs.clone();
772772
let render_options = options.render_options.clone();
773773
let scrape_examples_options = options.scrape_examples_options.clone();
774+
let document_private = options.render_options.document_private;
774775
let config = core::create_config(options);
775776

776777
interface::create_compiler_and_run(config, |compiler| {
@@ -791,7 +792,12 @@ fn main_options(options: config::Options) -> MainResult {
791792
let (resolver, resolver_caches) = {
792793
let (krate, resolver, _) = &*abort_on_err(queries.expansion(), sess).peek();
793794
let resolver_caches = resolver.borrow_mut().access(|resolver| {
794-
collect_intra_doc_links::early_resolve_intra_doc_links(resolver, krate, externs)
795+
collect_intra_doc_links::early_resolve_intra_doc_links(
796+
resolver,
797+
krate,
798+
externs,
799+
document_private,
800+
)
795801
});
796802
(resolver.clone(), resolver_caches)
797803
};

src/librustdoc/passes/collect_intra_doc_links/early.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ crate fn early_resolve_intra_doc_links(
2222
resolver: &mut Resolver<'_>,
2323
krate: &ast::Crate,
2424
externs: Externs,
25+
document_private_items: bool,
2526
) -> ResolverCaches {
2627
let mut loader = IntraLinkCrateLoader {
2728
resolver,
@@ -30,6 +31,7 @@ crate fn early_resolve_intra_doc_links(
3031
traits_in_scope: Default::default(),
3132
all_traits: Default::default(),
3233
all_trait_impls: Default::default(),
34+
document_private_items,
3335
};
3436

3537
// Overridden `visit_item` below doesn't apply to the crate root,
@@ -61,6 +63,7 @@ struct IntraLinkCrateLoader<'r, 'ra> {
6163
traits_in_scope: DefIdMap<Vec<TraitCandidate>>,
6264
all_traits: Vec<DefId>,
6365
all_trait_impls: Vec<DefId>,
66+
document_private_items: bool,
6467
}
6568

6669
impl IntraLinkCrateLoader<'_, '_> {
@@ -167,7 +170,7 @@ impl IntraLinkCrateLoader<'_, '_> {
167170
}
168171

169172
for child in self.resolver.module_children_or_reexports(module_id) {
170-
if child.vis == Visibility::Public {
173+
if child.vis == Visibility::Public || self.document_private_items {
171174
if let Some(def_id) = child.res.opt_def_id() {
172175
self.add_traits_in_parent_scope(def_id);
173176
}

src/test/rustdoc/issue-95633.rs

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// compile-flags: --document-private-items
2+
3+
// This ensures that no ICE is triggered when rustdoc is run on this code.
4+
5+
mod stdlib {
6+
pub (crate) use std::i8;
7+
}

0 commit comments

Comments
 (0)