Skip to content

rustdoc panics in rustc_metadata::decoder::DecodeContext::specialized_decode #38237

Closed
@Arnavion

Description

@Arnavion

rustc 1.15.0-nightly (daf8c1d 2016-12-05) (msvc) installed via rustup on W7 x64, and same version on Linux

Windows backtrace:

thread 'rustc' panicked at 'index out of bounds: the len is 0 but the index is 2', ../src/libcollections\vec.rs:1362
stack backtrace:
   0:      0x7fee76902ea - std::panicking::Location::line::h9363ce800e842170
   1:      0x7fee768f774 - std::panicking::Location::line::h9363ce800e842170
   2:      0x7fee76931cd - std::panicking::rust_panic_with_hook::hc790e47d4ecc86cd
   3:      0x7fee7693068 - std::panicking::begin_panic_fmt::h5912b2d2df332044
   4:      0x7fee7692f84 - std::panicking::begin_panic_fmt::h5912b2d2df332044
   5:      0x7fee7692f19 - rust_begin_unwind
   6:      0x7fee76a4fb7 - core::panicking::panic_fmt::h561c5ee168a3d2cb
   7:      0x7fee76a4f70 - core::panicking::panic_bounds_check::h7d966cc89f07df40
   8:      0x7fee88ce207 - <rustc_metadata::decoder::DecodeContext<'a, 'tcx> as serialize::serialize::SpecializedDecoder<rustc::hir::def_id::CrateNum>>::specialized_decode::hc8f0e72922649da7
   9:      0x7fee889c081 - <unknown>
  10:      0x7fee88d7f3e - rustc_metadata::decoder::<impl rustc_metadata::cstore::CrateMetadata>::get_impl_trait::hf32c49d2c3453336
  11:      0x7fee88e07f9 - rustc_metadata::cstore_impl::<impl rustc::middle::cstore::CrateStore<'tcx> for rustc_metadata::cstore::CStore>::impl_trait_ref::h0637e602798b27c1
  12:      0x7fee21bed77 - rustc::ty::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::impl_trait_ref::h0df09e1e57ae3b56
  13:      0x7fee2c08903 - rustdoc::clean::inline::build_impl::h05bed9f6de84a1c7
  14:      0x7fee2c08233 - rustdoc::clean::inline::build_impls::h00e0dca0f704099a
  15:      0x7fee2c2f15f - <rustdoc::doctree::Impl as rustdoc::clean::Clean<collections::vec::Vec<rustdoc::clean::Item>>>::clean::h8f4c479a62a2be62
  16:      0x7fee2c2da11 - <rustdoc::doctree::Impl as rustdoc::clean::Clean<collections::vec::Vec<rustdoc::clean::Item>>>::clean::h8f4c479a62a2be62
  17:      0x7fee2c10c7f - <rustdoc::doctree::Module as rustdoc::clean::Clean<rustdoc::clean::Item>>::clean::h6fa5ee64576cc5e4
  18:      0x7fee2c0ccb0 - <rustdoc::visit_ast::RustdocVisitor<'a, 'tcx> as rustdoc::clean::Clean<rustdoc::clean::Crate>>::clean::h4a3185056f7c7942
  19:      0x7fee2c3a2c8 - rustdoc::core::run_core::h7201412b77c31c4a
  20:      0x7fee2b5b0ef - <unknown>
  21:      0x7fee2bb331f - <unknown>
  22:      0x7fee2c376b7 - rustdoc::core::run_core::h7201412b77c31c4a
  23:      0x7fee2b7f2ad - <unknown>
  24:      0x7fee7695bf1 - _rust_maybe_catch_panic
  25:      0x7fee2ba3d7b - <unknown>
  26:      0x7fee768d86e - std::sys::imp::thread::Thread::new::hd990f5dcc0d4bad9
  27:         0x774659cc - BaseThreadInitThunk

error: Could not document `bar`.

Linux backtrace:

thread 'rustc' panicked at 'index out of bounds: the len is 0 but the index is 2', ../src/libcollections/vec.rs:1362
stack backtrace:
   1:     0x7ff38daae7ba - std::sys::imp::backtrace::tracing::imp::write::hbea47d9dd19b523c
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:42
   2:     0x7ff38dabd68f - std::panicking::default_hook::{{closure}}::h6875a2976258b020
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:247
   3:     0x7ff38dabd22d - std::panicking::default_hook::h88ffbc5922643264
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:257
   4:     0x7ff38dabdb37 - std::panicking::rust_panic_with_hook::hc790e47d4ecc86cd
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:451
   5:     0x7ff38dabd9c4 - std::panicking::begin_panic::hc066339e2fdc17d1
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:413
   6:     0x7ff38dabd8e9 - std::panicking::begin_panic_fmt::h5912b2d2df332044
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:397
   7:     0x7ff38dabd877 - rust_begin_unwind
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:373
   8:     0x7ff38db0db3d - core::panicking::panic_fmt::h561c5ee168a3d2cb
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcore/panicking.rs:69
   9:     0x7ff38db0dae8 - core::panicking::panic_bounds_check::h7d966cc89f07df40
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcore/panicking.rs:56
  10:     0x7ff38b1fc632 - <rustc_metadata::decoder::DecodeContext<'a, 'tcx> as serialize::serialize::SpecializedDecoder<rustc::hir::def_id::CrateNum>>::specialized_decode::hc8f0e72922649da7
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcollections/vec.rs:1362
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_data_structures/indexed_vec.rs:174
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_metadata/decoder.rs:286
  11:     0x7ff38b1cf0bd - <rustc::ty::sty::TraitRef<'tcx> as serialize::serialize::Decodable>::decode::{{closure}}::hba088b72cd57fdbf
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libserialize/serialize.rs:746
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libserialize/serialize.rs:201
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/hir/def_id.rs:112
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libserialize/serialize.rs:195
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/hir/def_id.rs:110
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libserialize/serialize.rs:201
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/sty.rs:395
  12:     0x7ff38b205357 - rustc_metadata::decoder::<impl rustc_metadata::cstore::CrateMetadata>::get_impl_trait::hf32c49d2c3453336
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libserialize/serialize.rs:195
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/sty.rs:393
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_metadata/decoder.rs:156
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_metadata/decoder.rs:710
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcore/option.rs:383
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_metadata/decoder.rs:710
  13:     0x7ff38b20c457 - rustc_metadata::cstore_impl::<impl rustc::middle::cstore::CrateStore<'tcx> for rustc_metadata::cstore::CStore>::impl_trait_ref::h0637e602798b27c1
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_metadata/cstore_impl.rs:172
  14:     0x7ff38abe2a50 - rustc::ty::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::impl_trait_ref::h0df09e1e57ae3b56
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/mod.rs:2211
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/mod.rs:1903
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/dep_graph/dep_tracking_map.rs:145
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/mod.rs:1899
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/mod.rs:2209
  15:     0x7ff38de5167c - rustdoc::clean::inline::build_impl::h05bed9f6de84a1c7
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/clean/inline.rs:302
  16:     0x7ff38de51095 - rustdoc::clean::inline::build_impls::h00e0dca0f704099a
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/clean/inline.rs:262
  17:     0x7ff38de6ee15 - rustdoc::clean::build_deref_target_impls::h0a4909a186454572
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/clean/mod.rs:2497
  18:     0x7ff38de6deed - <rustdoc::doctree::Impl as rustdoc::clean::Clean<collections::vec::Vec<rustdoc::clean::Item>>>::clean::h8f4c479a62a2be62
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/clean/mod.rs:2452
  19:     0x7ff38de5794b - <rustdoc::doctree::Module as rustdoc::clean::Clean<rustdoc::clean::Item>>::clean::h6fa5ee64576cc5e4
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/clean/mod.rs:432
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcore/ops.rs:2645
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcore/option.rs:383
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcore/iter/mod.rs:1798
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcollections/vec.rs:1654
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcollections/vec.rs:1606
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcollections/vec.rs:1570
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/clean/mod.rs:432
  20:     0x7ff38de5469a - <rustdoc::visit_ast::RustdocVisitor<'a, 'tcx> as rustdoc::clean::Clean<rustdoc::clean::Crate>>::clean::h4a3185056f7c7942
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/clean/mod.rs:140
  21:     0x7ff38de752c4 - rustdoc::core::run_core::{{closure}}::h14baef0900ca2146
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/core.rs:203
  22:     0x7ff38dda97ce - rustc_driver::driver::phase_3_run_analysis_passes::{{closure}}::h0b3b322598b3dbfe
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_driver/driver.rs:992
  23:     0x7ff38dda3a8e - rustc_driver::driver::phase_3_run_analysis_passes::h9306026d13589f8d
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1033
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/thread/local.rs:245
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1030
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1017
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/thread/local.rs:245
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1014
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:782
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_driver/driver.rs:866
  24:     0x7ff38de73f3b - rustdoc::core::run_core::h7201412b77c31c4a
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/core.rs:166
  25:     0x7ff38ddca56f - std::panicking::try::do_call::h17a1537173a0db24
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustdoc/lib.rs:367
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/librustc_driver/lib.rs:1051
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panic.rs:295
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:356
  26:     0x7ff38dac807a - __rust_maybe_catch_panic
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libpanic_unwind/lib.rs:97
  27:     0x7ff38ddebcb6 - <F as alloc::boxed::FnBox<A>>::call_box::h51119fd566982db9
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:332
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/panic.rs:351
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/thread/mod.rs:287
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/liballoc/boxed.rs:595
  28:     0x7ff38dabc4f4 - std::sys::imp::thread::Thread::new::thread_start::h8084b1107992ae5b
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/liballoc/boxed.rs:605
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/sys_common/thread.rs:21
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libstd/sys/unix/thread.rs:84
  29:     0x7ff385de9453 - start_thread
  30:     0x7ff38d78339e - __GI___clone
  31:                0x0 - <unknown>

error: Could not document `bar`.

Repro: https://github.com/Arnavion/rust-38237 Run cargo doc or cargo doc --no-deps under bar/

Command-line issued by cargo:

rustdoc --crate-name bar src\lib.rs -o "C:\Stuff\Sources\rust-38237\bar\target\doc" -L "dependency=C:\Stuff\Sources\rust-38237\bar\target\debug\deps" --extern "semver=C:\Stuff\Sources\rust-38237\bar\target\debug\deps\libsemver-47db426068ce5e60.rlib" --extern "foo=C:\Stuff\Sources\rust-38237\bar\target\debug\deps\foo-7c4bbfbb879ae671.dll"

I am unable to simplify the repro any further - all parts seem necessary to trigger the panic:

  • A crate (bar) with a struct, and an impl of Deref for that struct with Target = ::semver::VersionReq
  • The ::semver::VersionReq must come from the real semver package. A fake mod semver { pub struct VersionReq; } doesn't panic.
  • A proc macro crate (foo) must be imported.
  • Said proc macro crate must not be empty - it must contain atleast one enum even if the enum isn't public.
  • The enum must have #[derive(Debug)] on it.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions