Skip to content

rustdoc warns "no item in scope" due to extra doc string #119965

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Osse opened this issue Jan 14, 2024 · 4 comments
Open

rustdoc warns "no item in scope" due to extra doc string #119965

Osse opened this issue Jan 14, 2024 · 4 comments
Labels
A-intra-doc-links Area: Intra-doc links, the ability to link to items in docs by name C-bug Category: This is a bug. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.

Comments

@Osse
Copy link

Osse commented Jan 14, 2024

This is a minimal example of the problem; in my actual case foo is a separate file, which made the error harder to spot:

//! My cool crate
//!
//! Hello world.

/// foo is a module
pub mod foo {
    //! Foo docs
    //!
    //! The main thing is [S].

    /// S is a thing.
    pub struct S;
}

Running cargo doc or rustdoc src/lib.rs gives:

 Documenting mycrate v0.1.0 (/home/osse/dev/rustdoctest)
warning: unresolved link to `S`
 --> src/lib.rs:9:28
  |
9 |     //! The main thing is [S].
  |                            ^ no item named `S` in scope
  |
  = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
  = note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default

Honestly I don't know what I expected to happen; in hindsight the doc comments don't make that much sense. But I think the error can be improved. This happened as I was starting to write docs for foo in my actual foo.rs and it took me a good while to first find the offending doc line and even consider that to be the problem.

What seems to happen is that the presence of /// foo is a module makes rustdoc resolve links in the docs inside pub mod foo { } as if they were written outside. In the generated docs the headers "My cool crate" and "Foo docs" appear concatenated into one. Removing /// foo is a module makes the error go away and the link in the generated docs works as expected.

I tried fixing it myself, but realized that it would take me a very long time, and besides I don't really know what an acceptable solution would be. My best suggestion is to make this an error and only allow either /// blah mod foo; or mod foo { //! blah }

Meta

This happens in both latest stable and nightly as well as in my own locally compiled rustdoc.

There is no backtrace as rustdoc doesn't crash or error out but rather just prints a warning. Obviously this isn't an actual ICE. Changing the format!ting of the "no item named ..." error message into a panic! gives this backtrace:

backtrace
thread 'rustc' panicked at src/librustdoc/passes/collect_intra_doc_links.rs:1854:29:
no item named `S` in scope
stack backtrace:
   0:     0x7f1b2558b756 - std::backtrace_rs::backtrace::libunwind::trace::hbc2da4b61dd0c372
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:     0x7f1b2558b756 - std::backtrace_rs::backtrace::trace_unsynchronized::h7ad8b35b7c8d688c
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f1b2558b756 - std::sys_common::backtrace::_print_fmt::hc12cc0442874a4d6
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x7f1b2558b756 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h4b9fcac3af912075
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f1b255de080 - core::fmt::rt::Argument::fmt::h745f2073473e3ec1
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/core/src/fmt/rt.rs:142:9
   5:     0x7f1b255de080 - core::fmt::write::h8ddb66e46c6e9fcd
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/core/src/fmt/mod.rs:1120:17
   6:     0x7f1b2557f40f - std::io::Write::write_fmt::h898cd1b0a004b140
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/io/mod.rs:1810:15
   7:     0x7f1b2558b534 - std::sys_common::backtrace::_print::hbe7ec509934faa29
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7f1b2558b534 - std::sys_common::backtrace::print::h87cf2b6cec3d6605
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7f1b2558e2c7 - std::panicking::default_hook::{{closure}}::hd6ecd78a32b3eeb4
  10:     0x7f1b2558e029 - std::panicking::default_hook::he3392b6c1f3dcaf7
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/panicking.rs:292:9
  11:     0x7f1b2835511c - std[deca0889ce82c4db]::panicking::update_hook::<alloc[c2a284bac12f97e4]::boxed::Box<rustc_driver_impl[f95eaa42ee435085]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7f1b2558ea16 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h2d534bf7bce6913d
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/alloc/src/boxed.rs:2029:9
  13:     0x7f1b2558ea16 - std::panicking::rust_panic_with_hook::h7d752117b85b83e1
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/panicking.rs:783:13
  14:     0x7f1b2558e762 - std::panicking::begin_panic_handler::{{closure}}::h7758fdcb252a4373
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/panicking.rs:657:13
  15:     0x7f1b2558bc56 - std::sys_common::backtrace::__rust_end_short_backtrace::h33318c74edd27a7a
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/sys_common/backtrace.rs:171:18
  16:     0x7f1b2558e4c0 - rust_begin_unwind
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/panicking.rs:645:5
  17:     0x7f1b255da785 - core::panicking::panic_fmt::h049eb3a7f452cc88
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/core/src/panicking.rs:72:14
  18:     0x55bbe14e990f - rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::resolution_failure::{closure#0}
  19:     0x55bbe14e990f - rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::report_diagnostic::<alloc[c2a284bac12f97e4]::string::String, rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::resolution_failure::{closure#0}>::{closure#0}
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:1757:9
  20:     0x55bbe14e990f - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::report_diagnostic<alloc[c2a284bac12f97e4]::string::String, rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::resolution_failure::{closure#0}>::{closure#0} as core[cb10df156024dda0]::ops::function::FnOnce<(&mut rustc_errors[f8826f9bc6fe49c4]::diagnostic_builder::DiagnosticBuilder<()>,)>>::call_once::{shim:vtable#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/core/src/ops/function.rs:250:5
  21:     0x55bbe1475e92 - <alloc[c2a284bac12f97e4]::boxed::Box<dyn for<'a, 'b> core[cb10df156024dda0]::ops::function::FnOnce<(&'a mut rustc_errors[f8826f9bc6fe49c4]::diagnostic_builder::DiagnosticBuilder<'b, ()>,), Output = ()>> as core[cb10df156024dda0]::ops::function::FnOnce<(&mut rustc_errors[f8826f9bc6fe49c4]::diagnostic_builder::DiagnosticBuilder<()>,)>>::call_once
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/alloc/src/boxed.rs:2015:9
  22:     0x55bbe14e36e3 - rustc_middle[38fb98e9c6d777f4]::lint::struct_lint_level::struct_lint_level_impl::<alloc[c2a284bac12f97e4]::string::String>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_middle/src/lint.rs:404:9
  23:     0x55bbe14de59c - rustc_middle[38fb98e9c6d777f4]::lint::struct_lint_level::<alloc[c2a284bac12f97e4]::string::String, rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::report_diagnostic<alloc[c2a284bac12f97e4]::string::String, rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::resolution_failure::{closure#0}>::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_middle/src/lint.rs:408:5
  24:     0x55bbe12851f1 - <rustc_middle[38fb98e9c6d777f4]::ty::context::TyCtxt>::struct_span_lint_hir::<rustc_span[aa5b2f0b8a15275b]::span_encoding::Span, alloc[c2a284bac12f97e4]::string::String, rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::report_diagnostic<alloc[c2a284bac12f97e4]::string::String, rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::resolution_failure::{closure#0}>::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_middle/src/ty/context.rs:2081:9
  25:     0x55bbe1517b57 - rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::report_diagnostic::<alloc[c2a284bac12f97e4]::string::String, rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::resolution_failure::{closure#0}>
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:1706:5
  26:     0x55bbe1517b57 - rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::resolution_failure
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:1774:5
  27:     0x55bbe1516ca0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector>::resolve_with_disambiguator
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:1376:25
  28:     0x55bbe1516ca0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector>::resolve_with_disambiguator_cached
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:1252:30
  29:     0x55bbe151ebf0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector>::resolve_link
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:1032:35
  30:     0x55bbe151ebf0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector>::resolve_links
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:1001:28
  31:     0x55bbe151bdc0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_item
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:838:9
  32:     0x55bbe151bdc0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_mod::{closure#0}
                               at /home/osse/dev/rust/src/librustdoc/visit.rs:59:37
  33:     0x55bbe151bdc0 - <core[cb10df156024dda0]::slice::iter::Iter<rustdoc[6563f7f7b44140c7]::clean::types::Item> as core[cb10df156024dda0]::iter::traits::iterator::Iterator>::for_each::<<rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_mod::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/core/src/slice/iter/macros.rs:254:21
  34:     0x55bbe151bdc0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_mod
                               at /home/osse/dev/rust/src/librustdoc/visit.rs:59:9
  35:     0x55bbe151bdc0 - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_inner_recur
                               at /home/osse/dev/rust/src/librustdoc/visit.rs:13:17
  36:     0x55bbe151032e - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_item_recur
  37:     0x55bbe151032e - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_item
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:839:9
  38:     0x55bbe151032e - <rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::LinkCollector as rustdoc[6563f7f7b44140c7]::visit::DocVisitor>::visit_crate
                               at /home/osse/dev/rust/src/librustdoc/visit.rs:63:9
  39:     0x55bbe151032e - rustdoc[6563f7f7b44140c7]::passes::collect_intra_doc_links::collect_intra_doc_links
                               at /home/osse/dev/rust/src/librustdoc/passes/collect_intra_doc_links.rs:49:5
  40:     0x55bbe123fade - rustdoc[6563f7f7b44140c7]::core::run_global_ctxt::{closure#8}
                               at /home/osse/dev/rust/src/librustdoc/core.rs:444:51
  41:     0x55bbe123fade - <rustc_data_structures[3e5f372105827e0f]::profiling::VerboseTimingGuard>::run::<rustdoc[6563f7f7b44140c7]::clean::types::Crate, rustdoc[6563f7f7b44140c7]::core::run_global_ctxt::{closure#8}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_data_structures/src/profiling.rs:752:9
  42:     0x55bbe123fade - <rustc_session[fc2904b91b44d305]::session::Session>::time::<rustdoc[6563f7f7b44140c7]::clean::types::Crate, rustdoc[6563f7f7b44140c7]::core::run_global_ctxt::{closure#8}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_session/src/utils.rs:12:9
  43:     0x55bbe123fade - rustdoc[6563f7f7b44140c7]::core::run_global_ctxt
                               at /home/osse/dev/rust/src/librustdoc/core.rs:444:21
  44:     0x55bbe123fade - rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}::{closure#0}
                               at /home/osse/dev/rust/src/librustdoc/lib.rs:808:21
  45:     0x55bbe123fade - <rustc_data_structures[3e5f372105827e0f]::profiling::VerboseTimingGuard>::run::<(rustdoc[6563f7f7b44140c7]::clean::types::Crate, rustdoc[6563f7f7b44140c7]::config::RenderOptions, rustdoc[6563f7f7b44140c7]::formats::cache::Cache), rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_data_structures/src/profiling.rs:752:9
  46:     0x55bbe123fade - <rustc_session[fc2904b91b44d305]::session::Session>::time::<(rustdoc[6563f7f7b44140c7]::clean::types::Crate, rustdoc[6563f7f7b44140c7]::config::RenderOptions, rustdoc[6563f7f7b44140c7]::formats::cache::Cache), rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_session/src/utils.rs:12:9
  47:     0x55bbe12830cd - rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}
                               at /home/osse/dev/rust/src/librustdoc/lib.rs:807:55
  48:     0x55bbe12830cd - <rustc_middle[38fb98e9c6d777f4]::ty::context::GlobalCtxt>::enter::<rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_middle/src/ty/context.rs:666:37
  49:     0x55bbe12830cd - rustc_middle[38fb98e9c6d777f4]::ty::context::tls::enter_context::<<rustc_middle[38fb98e9c6d777f4]::ty::context::GlobalCtxt>::enter<rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_middle/src/ty/context/tls.rs:82:9
  50:     0x55bbe12830cd - <std[deca0889ce82c4db]::thread::local::LocalKey<core[cb10df156024dda0]::cell::Cell<*const ()>>>::try_with::<rustc_middle[38fb98e9c6d777f4]::ty::context::tls::enter_context<<rustc_middle[38fb98e9c6d777f4]::ty::context::GlobalCtxt>::enter<rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/thread/local.rs:270:16
  51:     0x55bbe12830cd - <std[deca0889ce82c4db]::thread::local::LocalKey<core[cb10df156024dda0]::cell::Cell<*const ()>>>::with::<rustc_middle[38fb98e9c6d777f4]::ty::context::tls::enter_context<<rustc_middle[38fb98e9c6d777f4]::ty::context::GlobalCtxt>::enter<rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/thread/local.rs:246:9
  52:     0x55bbe12830cd - rustc_middle[38fb98e9c6d777f4]::ty::context::tls::enter_context::<<rustc_middle[38fb98e9c6d777f4]::ty::context::GlobalCtxt>::enter<rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_middle/src/ty/context/tls.rs:79:9
  53:     0x55bbe12830cd - <rustc_middle[38fb98e9c6d777f4]::ty::context::GlobalCtxt>::enter::<rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_middle/src/ty/context.rs:666:9
  54:     0x55bbe139d45d - <rustc_interface[edcd441960a74143]::queries::QueryResult<&rustc_middle[38fb98e9c6d777f4]::ty::context::GlobalCtxt>>::enter::<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_interface/src/queries.rs:71:9
  55:     0x55bbe139d45d - rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}
                               at /home/osse/dev/rust/src/librustdoc/lib.rs:806:13
  56:     0x55bbe139d45d - <rustc_interface[edcd441960a74143]::interface::Compiler>::enter::<rustdoc[6563f7f7b44140c7]::main_args::{closure#1}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_interface/src/queries.rs:314:19
  57:     0x55bbe125b961 - rustdoc[6563f7f7b44140c7]::main_args::{closure#1}
                               at /home/osse/dev/rust/src/librustdoc/lib.rs:800:9
  58:     0x55bbe125b961 - rustc_interface[edcd441960a74143]::interface::run_compiler::<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}::{closure#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_interface/src/interface.rs:421:21
  59:     0x55bbe125b961 - rustc_span[aa5b2f0b8a15275b]::set_source_map::<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_span/src/lib.rs:1051:5
  60:     0x55bbe125b961 - rustc_interface[edcd441960a74143]::interface::run_compiler::<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_interface/src/interface.rs:415:13
  61:     0x55bbe123bc0a - rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals::<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_interface/src/util.rs:117:13
  62:     0x55bbe123bc0a - <scoped_tls[da3cca1f1419071d]::ScopedKey<rustc_span[aa5b2f0b8a15275b]::SessionGlobals>>::set::<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rust/deps/scoped-tls-1.0.1/src/lib.rs:137:9
  63:     0x55bbe123bc0a - rustc_span[aa5b2f0b8a15275b]::create_session_globals_then::<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_span/src/lib.rs:130:5
  64:     0x55bbe13684b0 - rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals::<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/compiler/rustc_interface/src/util.rs:79:38
  65:     0x55bbe13684b0 - std[deca0889ce82c4db]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/sys_common/backtrace.rs:155:18
  66:     0x55bbe1254f74 - <std[deca0889ce82c4db]::thread::Builder>::spawn_unchecked_::<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#1}::{closure#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/thread/mod.rs:529:17
  67:     0x55bbe1254f74 - <core[cb10df156024dda0]::panic::unwind_safe::AssertUnwindSafe<<std[deca0889ce82c4db]::thread::Builder>::spawn_unchecked_<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#1}::{closure#0}> as core[cb10df156024dda0]::ops::function::FnOnce<()>>::call_once
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/core/src/panic/unwind_safe.rs:272:9
  68:     0x55bbe1254f74 - std[deca0889ce82c4db]::panicking::try::do_call::<core[cb10df156024dda0]::panic::unwind_safe::AssertUnwindSafe<<std[deca0889ce82c4db]::thread::Builder>::spawn_unchecked_<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#1}::{closure#0}>, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/panicking.rs:552:40
  69:     0x55bbe1254f74 - std[deca0889ce82c4db]::panicking::try::<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, core[cb10df156024dda0]::panic::unwind_safe::AssertUnwindSafe<<std[deca0889ce82c4db]::thread::Builder>::spawn_unchecked_<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#1}::{closure#0}>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/panicking.rs:516:19
  70:     0x55bbe1464e73 - std[deca0889ce82c4db]::panic::catch_unwind::<core[cb10df156024dda0]::panic::unwind_safe::AssertUnwindSafe<<std[deca0889ce82c4db]::thread::Builder>::spawn_unchecked_<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#1}::{closure#0}>, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/panic.rs:142:14
  71:     0x55bbe1464e73 - <std[deca0889ce82c4db]::thread::Builder>::spawn_unchecked_::<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#1}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/thread/mod.rs:528:30
  72:     0x55bbe1464e73 - <<std[deca0889ce82c4db]::thread::Builder>::spawn_unchecked_<rustc_interface[edcd441960a74143]::util::run_in_thread_with_globals<rustc_interface[edcd441960a74143]::util::run_in_thread_pool_with_globals<rustc_interface[edcd441960a74143]::interface::run_compiler<core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>, rustdoc[6563f7f7b44140c7]::main_args::{closure#1}>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[cb10df156024dda0]::result::Result<(), rustc_span[aa5b2f0b8a15275b]::ErrorGuaranteed>>::{closure#1} as core[cb10df156024dda0]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/core/src/ops/function.rs:250:5
  73:     0x7f1b25598945 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h44369edd0d96ca0d
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/alloc/src/boxed.rs:2015:9
  74:     0x7f1b25598945 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h71556d488885a523
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/alloc/src/boxed.rs:2015:9
  75:     0x7f1b25598945 - std::sys::unix::thread::Thread::new::thread_start::h46db652d65e1cf2a
                               at /rustc/3ee671095499d83ba18d510683fa2a784d7d2ad2/library/std/src/sys/unix/thread.rs:108:17
  76:     0x7f1b25097ada - start_thread
                               at ./nptl/pthread_create.c:444:8
  77:     0x7f1b2512847c - __GI___clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
  78:                0x0 - <unknown>

error: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-rustdoc&template=ice.md

note: please attach the file at `/home/osse/dev/rustdoctest/rustc-ice-2024-01-14T13_57_50-57923.txt` to your bug report

query stack during panic:
end of query stack
@Osse Osse added the C-bug Category: This is a bug. label Jan 14, 2024
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Jan 14, 2024
@fmease fmease added T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. A-intra-doc-links Area: Intra-doc links, the ability to link to items in docs by name and removed needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Jan 14, 2024
@fmease
Copy link
Member

fmease commented Jan 14, 2024

What seems to happen is that the presence of /// foo is a module makes rustdoc resolve links in the docs inside pub mod foo { } as if they were written outside. In the generated docs the headers "My cool crate" and "Foo docs" appear concatenated into one

Good catch and good analysis, thank you! Rustdoc does indeed concatenate the outer & inner doc strings and it seems like intra-doc link resolutions happens afterwards relative to the module of the outer doc strings.

We should definitely fix this if feasible (or emit a warning if not as you've suggested).

@fmease
Copy link
Member

fmease commented Jan 14, 2024

Btw, you could've passed -Ztreat-err-as-bug=1 -Drustdoc::broken-intra-doc-links to rustdoc to generate a backtrace, no need to modify the source code in this case (not that you could've known) ;)

@Osse
Copy link
Author

Osse commented Jan 15, 2024

That's a pretty cool feature! Thanks.

@fmease
Copy link
Member

fmease commented Jan 17, 2024

Hmm, #78611 tried to fix this but the author didn't follow through with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-intra-doc-links Area: Intra-doc links, the ability to link to items in docs by name C-bug Category: This is a bug. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

3 participants