Skip to content

rustdoc panics when resolving intra doc link #93428

Closed
@Shemnei

Description

@Shemnei

Running cargo +nightly doc on the crate off-rs fails with a (semi-unrelated) panic.
This currently also fails to build on docs.rs: https://docs.rs/crate/off-rs/0.1.3/builds/500166

This started to occur with the latest nightly version (rustc 1.60.0-nightly (21b4a9cfd 2022-01-27)).

Probable cause

The issue is probably related to the following doc comment line: https://github.com/michidk/off-rs/blob/6a0146d4f2cadb1e46ce8849abd0269cd97d3528/src/parser/options.rs#L7.
Specifically the intra doc link causes rustdoc to fail.

/// When these limits are exceeded during the [`parse`](`crate::parser::Parser::parse`)

When this line is replaced with the follwing (adding an anonymous lifetime) line rustdoc finishes successfully:

/// When these limits are exceeded during the [`parse`](`crate::parser::Parser::<'_>::parse`)

Minimal viable example

The example below will also panic

  • The intra doc link beeing in an extra module is important as it otherwise will not panic but succeed
  • It must be [`crate:: ...`], with [`super:: ...`] it will succeed.
pub struct Test<'a> {
    data: &'a (),
}

impl<'a> Test<'a> {
    pub fn do_test(&self) {}
}

pub mod demo {
    //! [`crate::Test::do_test`]
}

Related

Related issues:

Meta

rustc --version --verbose:

rustc 1.60.0-nightly (21b4a9cfd 2022-01-27)
binary: rustc
commit-hash: 21b4a9cfdcbb1e76f4b36b5c3cfd64d627285093
commit-date: 2022-01-27
host: x86_64-unknown-linux-gnu
release: 1.60.0-nightly
LLVM version: 13.0.0
Backtrace

docs.rs error: https://docs.rs/crate/off-rs/0.1.3/builds/500166

RUST_BACKTRACE=1 cargo +nightly doc:

 Documenting off-rs v0.1.3 (/home/mtx/tmp/off-rs)
thread 'rustc' panicked at 'no entry found for key', src/librustdoc/passes/collect_intra_doc_links.rs:929:16
stack backtrace:
   0: rust_begin_unwind
             at /rustc/21b4a9cfdcbb1e76f4b36b5c3cfd64d627285093/library/std/src/panicking.rs:577:5
   1: core::panicking::panic_fmt
             at /rustc/21b4a9cfdcbb1e76f4b36b5c3cfd64d627285093/library/core/src/panicking.rs:135:14
   2: core::panicking::panic_display
             at /rustc/21b4a9cfdcbb1e76f4b36b5c3cfd64d627285093/library/core/src/panicking.rs:65:5
   3: core::panicking::panic_str
             at /rustc/21b4a9cfdcbb1e76f4b36b5c3cfd64d627285093/library/core/src/panicking.rs:56:5
   4: core::option::expect_failed
             at /rustc/21b4a9cfdcbb1e76f4b36b5c3cfd64d627285093/library/core/src/option.rs:1840:5
   5: rustdoc::passes::collect_intra_doc_links::resolve_associated_trait_item
   6: <rustdoc::passes::collect_intra_doc_links::LinkCollector>::resolve_associated_item
   7: <rustdoc::passes::collect_intra_doc_links::LinkCollector>::resolve
   8: <rustdoc::passes::collect_intra_doc_links::LinkCollector>::resolve_link
   9: <rustdoc::passes::collect_intra_doc_links::LinkCollector as rustdoc::visit::DocVisitor>::visit_item
  10: <rustdoc::passes::collect_intra_doc_links::LinkCollector as rustdoc::visit::DocVisitor>::visit_inner_recur
  11: <rustdoc::passes::collect_intra_doc_links::LinkCollector as rustdoc::visit::DocVisitor>::visit_item
  12: <rustdoc::passes::collect_intra_doc_links::LinkCollector as rustdoc::visit::DocVisitor>::visit_inner_recur
  13: <rustdoc::passes::collect_intra_doc_links::LinkCollector as rustdoc::visit::DocVisitor>::visit_item
  14: <rustdoc::passes::collect_intra_doc_links::LinkCollector as rustdoc::visit::DocVisitor>::visit_inner_recur
  15: <rustdoc::passes::collect_intra_doc_links::LinkCollector as rustdoc::visit::DocVisitor>::visit_item
  16: rustdoc::passes::collect_intra_doc_links::collect_intra_doc_links
  17: <rustc_session::session::Session>::time::<rustdoc::clean::types::Crate, rustdoc::core::run_global_ctxt::{closure#8}>
  18: rustdoc::core::run_global_ctxt
  19: <rustc_session::session::Session>::time::<(rustdoc::clean::types::Crate, rustdoc::config::RenderOptions, rustdoc::formats::cache::Cache), rustdoc::main_options::{closure#0}::{closure#0}::{closure#1}::{closure#0}>
  20: <rustc_interface::interface::Compiler>::enter::<rustdoc::main_options::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>>
  21: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorReported>, rustc_interface::interface::create_compiler_and_run<core::result::Result<(), rustc_errors::ErrorReported>, rustdoc::main_options::{closure#0}>::{closure#1}>
  22: rustc_interface::interface::create_compiler_and_run::<core::result::Result<(), rustc_errors::ErrorReported>, rustdoc::main_options::{closure#0}>
  23: rustdoc::main_options
  24: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::util::setup_callbacks_and_run_in_thread_pool_with_globals<rustdoc::main_args::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

error: internal compiler error: unexpected panic

error: Unrecognized option: 'crate-version'

error: could not document `off-rs`

Caused by:
  process didn't exit successfully: `rustdoc --edition=2021 --crate-type lib --crate-name off_rs src/lib.rs -o /home/mtx/tmp/off-rs/target/doc --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat -C metadata=d6899838058215b9 -L dependency=/home/mtx/tmp/off-rs/target/debug/deps --crate-version 0.1.3` (exit status: 1)

Metadata

Metadata

Assignees

Labels

A-intra-doc-linksArea: Intra-doc links, the ability to link to items in docs by nameC-bugCategory: This is a bug.P-criticalCritical priorityregression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions