Skip to content

Rustdoc ICE when docstring contains ampersand link “[&]” followed by link to valid item in backticks #111896

Closed
@taylordotfish

Description

@taylordotfish

cargo doc produces an ICE when [&] is followed by (with a space or other text in between) a link to a valid Rust item surrounded in backticks (e.g., [`u8`]).

For example, given this code:

/// [&] and [`u8`]
pub fn foo() {}

cargo doc produces the following error:

Backtrace

 Documenting doc-ice v0.1.0 (/tmp/doc-ice)
thread 'rustc' panicked at 'begin <= end (1 <= 0) when slicing `&`', src/librustdoc/html/markdown.rs:394:34
stack backtrace:
   0:     0x7fa5196ef531 - std::backtrace_rs::backtrace::libunwind::trace::h85353fbffbb5fad1
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7fa5196ef531 - std::backtrace_rs::backtrace::trace_unsynchronized::hfc7dfff9156f6f98
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7fa5196ef531 - std::sys_common::backtrace::_print_fmt::h648083d2cc9ba829
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x7fa5196ef531 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h432754e844e463da
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7fa51974fbbf - core::fmt::rt::Argument::fmt::h86d079eba54a9db7
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/core/src/fmt/rt.rs:138:9
   5:     0x7fa51974fbbf - core::fmt::write::h9ec36ddf085af422
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/core/src/fmt/mod.rs:1094:21
   6:     0x7fa5196e2831 - std::io::Write::write_fmt::h9072a6fe98b37072
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/io/mod.rs:1712:15
   7:     0x7fa5196ef345 - std::sys_common::backtrace::_print::h42cf0a528b22cabe
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7fa5196ef345 - std::sys_common::backtrace::print::hf1676a4dba4fd321
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7fa5196f1ff7 - std::panicking::default_hook::{{closure}}::h26afb1d646554fbd
  10:     0x7fa5196f1de4 - std::panicking::default_hook::h86dd4c48a94450d5
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/panicking.rs:288:9
  11:     0x7fa51c895a0b - rustc_driver_impl[d00b7a9cb5f2ce91]::install_ice_hook::{closure#0}
  12:     0x7fa5196f2717 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hfc9965ef7e796e3f
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/alloc/src/boxed.rs:1999:9
  13:     0x7fa5196f2717 - std::panicking::rust_panic_with_hook::h6ce289fcafa1b5d6
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/panicking.rs:695:13
  14:     0x7fa5196f2497 - std::panicking::begin_panic_handler::{{closure}}::hfbc29edfcefb8d0a
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/panicking.rs:582:13
  15:     0x7fa5196ef966 - std::sys_common::backtrace::__rust_end_short_backtrace::h8021c3146e334c0a
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/sys_common/backtrace.rs:151:18
  16:     0x7fa5196f2202 - rust_begin_unwind
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/panicking.rs:578:5
  17:     0x7fa51974be43 - core::panicking::panic_fmt::h5d71f2ca8fbef52b
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/core/src/panicking.rs:67:14
  18:     0x7fa519754b2f - core::str::slice_error_fail_rt::h0f13a99ac005d839
  19:     0x7fa519754987 - core::str::slice_error_fail::hb2c7e8f903dfdf2e
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/core/src/str/mod.rs:87:9
  20:     0x5621acae1862 - rustdoc[3e41928430b2e821]::html::markdown::short_markdown_summary
  21:     0x5621acb4cb7d - <rustdoc[3e41928430b2e821]::formats::cache::CacheBuilder as rustdoc[3e41928430b2e821]::fold::DocFolder>::fold_item
  22:     0x5621acaaaa05 - <alloc[180c8788ec8caf0c]::vec::Vec<rustdoc[3e41928430b2e821]::clean::types::Item> as alloc[180c8788ec8caf0c]::vec::spec_from_iter::SpecFromIter<rustdoc[3e41928430b2e821]::clean::types::Item, core[2ef80f1aadaf56e9]::iter::adapters::filter_map::FilterMap<alloc[180c8788ec8caf0c]::vec::into_iter::IntoIter<rustdoc[3e41928430b2e821]::clean::types::Item>, <rustdoc[3e41928430b2e821]::formats::cache::CacheBuilder as rustdoc[3e41928430b2e821]::fold::DocFolder>::fold_inner_recur::{closure#5}>>>::from_iter
  23:     0x5621acb47548 - <rustdoc[3e41928430b2e821]::formats::cache::CacheBuilder as rustdoc[3e41928430b2e821]::fold::DocFolder>::fold_inner_recur
  24:     0x5621acb47b7e - <rustdoc[3e41928430b2e821]::formats::cache::CacheBuilder as rustdoc[3e41928430b2e821]::fold::DocFolder>::fold_item_recur
  25:     0x5621acb4d315 - <rustdoc[3e41928430b2e821]::formats::cache::CacheBuilder as rustdoc[3e41928430b2e821]::fold::DocFolder>::fold_item
  26:     0x5621acb4a6c6 - <rustdoc[3e41928430b2e821]::formats::cache::Cache>::populate
  27:     0x5621ac9d4090 - <rustc_session[31645572b8ab3492]::session::Session>::time::<rustdoc[3e41928430b2e821]::clean::types::Crate, rustdoc[3e41928430b2e821]::core::run_global_ctxt::{closure#10}>
  28:     0x5621acb45b8f - rustdoc[3e41928430b2e821]::core::run_global_ctxt
  29:     0x5621ac9d41d1 - <rustc_session[31645572b8ab3492]::session::Session>::time::<(rustdoc[3e41928430b2e821]::clean::types::Crate, rustdoc[3e41928430b2e821]::config::RenderOptions, rustdoc[3e41928430b2e821]::formats::cache::Cache), rustdoc[3e41928430b2e821]::main_args::{closure#1}::{closure#0}::{closure#0}::{closure#0}>
  30:     0x5621acbfdd33 - <rustc_middle[7e83052949f575b3]::ty::context::GlobalCtxt>::enter::<rustdoc[3e41928430b2e821]::main_args::{closure#1}::{closure#0}::{closure#0}, core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>>
  31:     0x5621ac9f75c3 - <rustc_interface[cfd4f1bae86ee4d7]::interface::Compiler>::enter::<rustdoc[3e41928430b2e821]::main_args::{closure#1}::{closure#0}, core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>>
  32:     0x5621acb7f726 - rustc_span[8df09863e4fe0d6]::set_source_map::<core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>, rustc_interface[cfd4f1bae86ee4d7]::interface::run_compiler<core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>, rustdoc[3e41928430b2e821]::main_args::{closure#1}>::{closure#0}::{closure#0}>
  33:     0x5621ac93b11d - <scoped_tls[802aab8aba063b4c]::ScopedKey<rustc_span[8df09863e4fe0d6]::SessionGlobals>>::set::<rustc_interface[cfd4f1bae86ee4d7]::interface::run_compiler<core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>, rustdoc[3e41928430b2e821]::main_args::{closure#1}>::{closure#0}, core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>>
  34:     0x5621acac0029 - std[8a699ae0d1f3c3b0]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[cfd4f1bae86ee4d7]::util::run_in_thread_pool_with_globals<rustc_interface[cfd4f1bae86ee4d7]::interface::run_compiler<core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>, rustdoc[3e41928430b2e821]::main_args::{closure#1}>::{closure#0}, core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>>
  35:     0x5621acb2c661 - <<std[8a699ae0d1f3c3b0]::thread::Builder>::spawn_unchecked_<rustc_interface[cfd4f1bae86ee4d7]::util::run_in_thread_pool_with_globals<rustc_interface[cfd4f1bae86ee4d7]::interface::run_compiler<core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>, rustdoc[3e41928430b2e821]::main_args::{closure#1}>::{closure#0}, core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[2ef80f1aadaf56e9]::result::Result<(), rustc_span[8df09863e4fe0d6]::ErrorGuaranteed>>::{closure#1} as core[2ef80f1aadaf56e9]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  36:     0x7fa5196fcb85 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hf02aee76c98541f9
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/alloc/src/boxed.rs:1985:9
  37:     0x7fa5196fcb85 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7ccec49a983fed78
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/alloc/src/boxed.rs:1985:9
  38:     0x7fa5196fcb85 - std::sys::unix::thread::Thread::new::thread_start::hfa77c319ec7fdf2d
                               at /rustc/5ea3f0ae08c07472239a94ce55601e9b63eb1f45/library/std/src/sys/unix/thread.rs:108:17
  39:     0x7fa51959aea7 - start_thread
                               at ./nptl/pthread_create.c:477:8
  40:     0x7fa519376a2f - clone
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:95
  41:                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: rustc 1.71.0-nightly (5ea3f0ae0 2023-05-23) running on x86_64-unknown-linux-gnu

note: compiler flags: --crate-type lib -Z unstable-options

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
end of query stack
error: could not document `doc-ice`

Caused by:
  process didn't exit successfully: `/home/taylor/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/rustdoc --edition=2021 --crate-type lib --crate-name doc_ice src/lib.rs -o /tmp/doc-ice/target/doc --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat -C metadata=7b72b63e900334b7 -L dependency=/tmp/doc-ice/target/debug/deps -Z unstable-options --extern-html-root-takes-precedence --crate-version 0.1.0` (exit status: 101)

If the [`u8`] is changed to [u8], or if the [`u8`] and [&] are reordered, cargo doc runs as expected, creating links to the documentation for u8 and the primitive reference type. If [`u8`] is changed so it does not refer to a valid Rust item, cargo doc will also run without error (just warnings).

Meta

rustc --version --verbose:

rustc 1.71.0-nightly (5ea3f0ae0 2023-05-23)
binary: rustc
commit-hash: 5ea3f0ae08c07472239a94ce55601e9b63eb1f45
commit-date: 2023-05-23
host: x86_64-unknown-linux-gnu
release: 1.71.0-nightly
LLVM version: 16.0.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-intra-doc-linksArea: Intra-doc links, the ability to link to items in docs by nameC-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions