Skip to content

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

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

Closed
Arnavion opened this issue Dec 8, 2016 · 5 comments
Closed
Assignees

Comments

@Arnavion
Copy link

Arnavion commented Dec 8, 2016

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.
@Arnavion
Copy link
Author

With rustc 1.15.0-nightly (8f02c42 2016-12-15) I get a different backtrace for the same repro:

thread 'rustc' panicked at 'assertion failed: !self.is_proc_macro(item_id)', C:\bot\slave\nightly-dist-rustc-win-msvc-64\build\src\librustc_metadata\decoder.rs:523
stack backtrace:
   0:      0x7fef26ced8a - std::panicking::Location::line::he2106c63a7bda898
   1:      0x7fef26ce214 - std::panicking::Location::line::he2106c63a7bda898
   2:      0x7fef26d1c6d - std::panicking::rust_panic_with_hook::h6704edd5f66c8031
   3:      0x7fef29c51f9 - <unknown>
   4:      0x7fef2a35ed0 - rustc_metadata::decoder::<impl rustc_metadata::cstore::CrateMetadata>::entry::hbc7aed61dbec21a6
   5:      0x7fef2a38689 - rustc_metadata::decoder::<impl rustc_metadata::cstore::CrateMetadata>::get_visibility::h807eba63c03b81b9
   6:      0x7fef2a38b9c - rustc_metadata::decoder::<impl rustc_metadata::cstore::CrateMetadata>::get_impl_trait::h3f841a5c9799a42e
   7:      0x7fef2a41d79 - rustc_metadata::cstore_impl::<impl rustc::middle::cstore::CrateStore<'tcx> for rustc_metadata::cstore::CStore>::impl_trait_ref::ha1d833d9d46c191c
   8:      0x7fee7efdbd7 - rustc::ty::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::impl_trait_ref::h8c67f9358bd74507
   9:      0x7feea7c7453 - rustdoc::clean::inline::build_impl::hf58f63c15715029c
  10:      0x7feea7c6d83 - rustdoc::clean::inline::build_impls::h14e91e677e8f7d94
  11:      0x7feea7ee38f - <rustdoc::doctree::Impl as rustdoc::clean::Clean<collections::vec::Vec<rustdoc::clean::Item>>>::clean::hcaddb48ccf539d21
  12:      0x7feea7ecce1 - <rustdoc::doctree::Impl as rustdoc::clean::Clean<collections::vec::Vec<rustdoc::clean::Item>>>::clean::hcaddb48ccf539d21
  13:      0x7feea7d020f - <rustdoc::doctree::Module as rustdoc::clean::Clean<rustdoc::clean::Item>>::clean::h2fa8f90404b95ae3
  14:      0x7feea7cbfa9 - <rustdoc::visit_ast::RustdocVisitor<'a, 'tcx> as rustdoc::clean::Clean<rustdoc::clean::Crate>>::clean::hfacf6af3022b4e16
  15:      0x7feea7f92a7 - rustdoc::core::run_core::h00b2d9e4204dfeaf
  16:      0x7feea71b20f - <unknown>
  17:      0x7feea772a7f - <unknown>
  18:      0x7feea7f66fc - rustdoc::core::run_core::h00b2d9e4204dfeaf
  19:      0x7feea73e6dd - <unknown>
  20:      0x7fef26d4621 - _rust_maybe_catch_panic
  21:      0x7feea76352b - <unknown>
  22:      0x7fef26cc34e - std::sys::imp::thread::Thread::new::h187d5ea36be54766
  23:         0x774659cc - BaseThreadInitThunk

error: Could not document `bar`.

@jseyfried
Copy link
Contributor

Fixed in #38537.

@Arnavion
Copy link
Author

Thanks. I'll try it tonight.

@jseyfried
Copy link
Contributor

@Arnavion #38537 won't make it in to today's nightly.

@Arnavion
Copy link
Author

That's not a problem. I'm perfectly capable of building a local rust build synced to your PR :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants