Skip to content
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

thread 'rustc' panicked at 'already borrowed: BorrowMutError', libcore/result.rs:945:5 #47972

Closed
PaulGrandperrin opened this issue Feb 2, 2018 · 7 comments
Assignees
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-high High priority T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@PaulGrandperrin
Copy link

Hi, I'm hitting a kind of transient bug:

  • appears seemingly randomly
  • then is 100% reproducible if you don't touch anything
  • then disappears when doing cargo clean

It's the second time I'm hitting it. The first time I made by mistake a change to my environment and the bug disappeared before I could get a backtrace of it. I don't remember exactly how and when it first appeared but I think it was unrelated to this new instance.

I would say it looks like it's related to incremental compilation.

I made a huge tar of my environment (.rustup .cargo and project) before doing a cargo clean, so if needed I can share it somewhere to reproduce.

I was using a locally compiled rustc from #47828 at the time, but the other time I got it, it was with a recent official nightly.

rustc 1.25.0-dev
binary: rustc
commit-hash: unknown
commit-date: unknown
host: x86_64-unknown-linux-gnu
release: 1.25.0-dev
LLVM version: 6.0

cc: @eddyb because we spoke about it on IRC

Here is the full backtrace:

paulg@debian ~/P/r/src> env RUST_BACKTRACE=full cargo run --features "instrumentation" --verbose
       Fresh cfg-if v0.1.2
       Fresh futures-await-await-macro v0.1.0
       Fresh rustc-demangle v0.1.5
       Fresh either v1.4.0
       Fresh byteorder v1.2.1
       Fresh futures v0.1.18
       Fresh slab v0.4.0
       Fresh unicode-xid v0.0.4
       Fresh cc v1.0.4
       Fresh libc v0.2.36
       Fresh unicode-xid v0.1.0
       Fresh num-traits v0.1.42
       Fresh quote v0.3.15
       Fresh itertools v0.7.6
       Fresh synom v0.11.3
       Fresh iovec v0.1.2
       Fresh proc-macro2 v0.1.10
       Fresh syn v0.11.11
       Fresh bytes v0.4.6
       Fresh futures-await-quote v0.4.0
       Fresh enum-primitive-derive v0.1.2
       Fresh synstructure v0.6.1
       Fresh backtrace-sys v0.1.16
       Fresh futures-await-synom v0.12.0
       Fresh failure_derive v0.1.1
       Fresh backtrace v0.3.5
       Fresh futures-await-syn v0.12.0
       Fresh failure v0.1.1
       Fresh futures-await-async-macro v0.1.1
       Fresh futures-await v0.1.0
   Compiling reactfs v0.1.0 (file:///home/paulg/Projets/reactfs)
     Running `rustc --crate-name reactfs src/main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 --cfg 'feature="instrumentation"' -C metadata=bc74da62e3393027 -C extra-filename=-bc74da62e3393027 --out-dir /home/paulg/Projets/reactfs/target/debug/deps -C incremental=/home/paulg/Projets/reactfs/target/debug/incremental -L dependency=/home/paulg/Projets/reactfs/target/debug/deps --extern num_traits=/home/paulg/Projets/reactfs/target/debug/deps/libnum_traits-91d422bec119676e.rlib --extern byteorder=/home/paulg/Projets/reactfs/target/debug/deps/libbyteorder-e390d66463519670.rlib --extern futures=/home/paulg/Projets/reactfs/target/debug/deps/libfutures-292d74a9b9173e00.rlib --extern itertools=/home/paulg/Projets/reactfs/target/debug/deps/libitertools-304d90e56277d5f7.rlib --extern slab=/home/paulg/Projets/reactfs/target/debug/deps/libslab-4a88d95025404389.rlib --extern failure=/home/paulg/Projets/reactfs/target/debug/deps/libfailure-63b1079093d206e3.rlib --extern futures_await=/home/paulg/Projets/reactfs/target/debug/deps/libfutures_await-e7d684946059c77d.rlib --extern bytes=/home/paulg/Projets/reactfs/target/debug/deps/libbytes-bb322e567597addb.rlib --extern enum_primitive_derive=/home/paulg/Projets/reactfs/target/debug/deps/libenum_primitive_derive-0e356ce256d8b220.so --extern reactfs=/home/paulg/Projets/reactfs/target/debug/deps/libreactfs-88d7ac954800cac3.rlib -L native=/home/paulg/Projets/reactfs/target/debug/build/backtrace-sys-70a67d15ed90922a/out/.libs`
error[E0433]: failed to resolve. Could not find `instrumentation` in `core`
  --> src/main.rs:37:8
   |
37 |     core::instrumentation::fuzz_btree(b"");
   |           ^^^^^^^^^^^^^^^ Could not find `instrumentation` in `core`

thread 'rustc' panicked at 'already borrowed: BorrowMutError', libcore/result.rs:945:5
stack backtrace:
   0:     0x7f0de340001b - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::h286b8794444c24e0
   1:     0x7f0de33ccee0 - std::sys_common::backtrace::print::h224f0d22b1b51e8c
   2:     0x7f0de33d2f65 - std::panicking::default_hook::{{closure}}::hfe62b839a6606b48
   3:     0x7f0de33d2cc1 - std::panicking::default_hook::h6bf4077c78186846
   4:     0x7f0de33d33a1 - std::panicking::rust_panic_with_hook::hfe94f219d0bc73b3
   5:     0x7f0de33d3262 - std::panicking::begin_panic::hcb9d3389615f930e
   6:     0x7f0de33d3162 - std::panicking::begin_panic_fmt::h3c2e7e0c6de38643
   7:     0x7f0de33d30f1 - rust_begin_unwind
   8:     0x7f0de3472e82 - core::panicking::panic_fmt::h455334a40386cc7c
   9:     0x7f0ddfcbc245 - core::result::unwrap_failed::h3eacb25393b53dcd
  10:     0x7f0ddf9de95b - rustc::ty::maps::on_disk_cache::OnDiskCache::load_diagnostics::h7b42610c81f80e3f
  11:     0x7f0ddfdbd2f3 - rustc::dep_graph::graph::DepGraph::try_mark_green::hd17018d9cd45c700
  12:     0x7f0ddfdbd6ea - rustc::dep_graph::graph::DepGraph::try_mark_green::hd17018d9cd45c700
  13:     0x7f0ddf9dd252 - rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_mark_green_and_read::h1612a1810dbb6b47
  14:     0x7f0ddf6a4ec7 - rustc::ty::maps::<impl rustc::ty::maps::queries::adt_def<'tcx>>::try_get::hdad1982db995c6e0
  15:     0x7f0ddf91641a - rustc::ty::maps::TyCtxtAt::adt_def::h668c969545fa4695
  16:     0x7f0ddf970daf - serialize::serialize::Decoder::read_enum::h64b43bb79d06e2c7
  17:     0x7f0ddf9fd056 - rustc::ty::maps::on_disk_cache::__ty_decoder_impl::<impl serialize::serialize::SpecializedDecoder<&'tcx rustc::ty::TyS<'tcx>> for rustc::ty::maps::on_disk_cache::CacheDecoder<'a, 'tcx, 'x>>::specialized_decode::had3d86f29fb18219
  18:     0x7f0ddf9e10ec - rustc::ty::maps::on_disk_cache::OnDiskCache::try_load_query_result::h6856f98dff5c9869
  19:     0x7f0ddf69c3ea - rustc::ty::maps::<impl rustc::ty::maps::queries::type_of<'tcx>>::try_get::h9eb2b0ce7b1d773d
  20:     0x7f0ddf915f0f - rustc::ty::maps::TyCtxtAt::type_of::h01a3db5b6203f699
  21:     0x7f0ddf9fee50 - rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::type_of::h0c94c376681792c7
  22:     0x7f0de1e9b958 - <rustc_typeck::collect::CollectItemTypesVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item::hf67d6995b4fa1e74
  23:     0x7f0de1ebd66c - rustc::hir::Crate::visit_all_item_likes::h0a4c9c83ce97cf1e
  24:     0x7f0de1ea8487 - rustc::util::common::time::hb8c52e5097c58534
  25:     0x7f0de1f78410 - rustc_typeck::check_crate::hb57d0f09c809136c
  26:     0x7f0de37fedfa - <std::thread::local::LocalKey<T>>::with::h6664f48517e4b7e1
  27:     0x7f0de37ffaf3 - <std::thread::local::LocalKey<T>>::with::h704a26f0a78f0701
  28:     0x7f0de38551ae - rustc::ty::context::TyCtxt::create_and_enter::hae32c8a45b10f266
  29:     0x7f0de376d883 - rustc_driver::driver::compile_input::h290f112545b8616b
  30:     0x7f0de3833cf6 - rustc_driver::run_compiler::h7dbc15974bba2187
  31:     0x7f0de373c258 - std::sys_common::backtrace::__rust_begin_short_backtrace::ha26daf9dd29d125e
  32:     0x7f0de3414129 - __rust_maybe_catch_panic
  33:     0x7f0de379bc87 - <F as alloc::boxed::FnBox<A>>::call_box::h0a954d980a423ec9
  34:     0x7f0de3403cda - std::sys_common::thread::start_thread::hd0eea2f47ffbdc04
  35:     0x7f0de33d3d35 - std::sys::unix::thread::Thread::new::thread_start::hb76f80f796f2d3c9
  36:     0x7f0ddd95b519 - start_thread
  37:     0x7f0de30c03ee - clone
  38:                0x0 - <unknown>

error: internal compiler error: unexpected panic

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

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.25.0-dev running on x86_64-unknown-linux-gnu

error: Could not compile `reactfs`.

Caused by:
  process didn't exit successfully: `rustc --crate-name reactfs src/main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 --cfg feature="instrumentation" -C metadata=bc74da62e3393027 -C extra-filename=-bc74da62e3393027 --out-dir /home/paulg/Projets/reactfs/target/debug/deps -C incremental=/home/paulg/Projets/reactfs/target/debug/incremental -L dependency=/home/paulg/Projets/reactfs/target/debug/deps --extern num_traits=/home/paulg/Projets/reactfs/target/debug/deps/libnum_traits-91d422bec119676e.rlib --extern byteorder=/home/paulg/Projets/reactfs/target/debug/deps/libbyteorder-e390d66463519670.rlib --extern futures=/home/paulg/Projets/reactfs/target/debug/deps/libfutures-292d74a9b9173e00.rlib --extern itertools=/home/paulg/Projets/reactfs/target/debug/deps/libitertools-304d90e56277d5f7.rlib --extern slab=/home/paulg/Projets/reactfs/target/debug/deps/libslab-4a88d95025404389.rlib --extern failure=/home/paulg/Projets/reactfs/target/debug/deps/libfailure-63b1079093d206e3.rlib --extern futures_await=/home/paulg/Projets/reactfs/target/debug/deps/libfutures_await-e7d684946059c77d.rlib --extern bytes=/home/paulg/Projets/reactfs/target/debug/deps/libbytes-bb322e567597addb.rlib --extern enum_primitive_derive=/home/paulg/Projets/reactfs/target/debug/deps/libenum_primitive_derive-0e356ce256d8b220.so --extern reactfs=/home/paulg/Projets/reactfs/target/debug/deps/libreactfs-88d7ac954800cac3.rlib -L native=/home/paulg/Projets/reactfs/target/debug/build/backtrace-sys-70a67d15ed90922a/out/.libs` (exit code: 101)
PaulGrandperrin added a commit to PaulGrandperrin/reactfs that referenced this issue Feb 2, 2018
@PaulGrandperrin
Copy link
Author

Ok, I now have more info about the bug and I'm able to reproduce it with rust nightly

rustc 1.25.0-nightly (56733bc9f 2018-02-01)
binary: rustc
commit-hash: 56733bc9f8302409a2b6110f422512923c878154
commit-date: 2018-02-01
host: x86_64-unknown-linux-gnu
release: 1.25.0-nightly
LLVM version: 4.0

To reproduce:

cd /tmp
git clone https://github.com/PaulGrandperrin/reactfs.git
cd reactfs/
git checkout rustc-issue-47972
cargo run --features "instrumentation"
git checkout HEAD^ # remove a comment, see commit below
cargo run --features "instrumentation"
# BOOM rustc panic
cargo clean
cargo run --features "instrumentation"
# no panics

Here is the commit that we remove at git checkout HEAD^

@eddyb
Copy link
Member

eddyb commented Feb 2, 2018

cc @nikomatsakis @michaelwoerister Seems to be incremental-related.

@cuviper cuviper added I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. labels Feb 3, 2018
@michaelwoerister
Copy link
Member

Thanks for the detailed bug report. This indeed looks it's related to incremental compilation.

@michaelwoerister
Copy link
Member

Looks like this happens due to a recursive invocation of OnDiskCache::load_indexed(). Not sure yet how to best solve this.

@nikomatsakis
Copy link
Contributor

Nominating for prioritization.

@michaelwoerister
Copy link
Member

I'll probably have a fix soon, I vote for P-high.

@nikomatsakis
Copy link
Contributor

triage: P-high

Assigning to the indomitable @michaelwoerister

@rust-highfive rust-highfive added P-high High priority and removed I-nominated labels Feb 15, 2018
Manishearth added a commit to Manishearth/rust that referenced this issue Feb 19, 2018
…coding, r=nikomatsakis

incr.comp.: Don't keep RefCells in on-disk-cache borrowed in order to allow for recursive invocations.

Fixes rust-lang#47972.

r? @nikomatsakis
Manishearth added a commit to Manishearth/rust that referenced this issue Feb 24, 2018
…coding, r=nikomatsakis

incr.comp.: Don't keep RefCells in on-disk-cache borrowed in order to allow for recursive invocations.

Fixes rust-lang#47972.

r? @nikomatsakis
Manishearth added a commit to Manishearth/rust that referenced this issue Feb 24, 2018
…coding, r=nikomatsakis

incr.comp.: Don't keep RefCells in on-disk-cache borrowed in order to allow for recursive invocations.

Fixes rust-lang#47972.

r? @nikomatsakis
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-high High priority T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

6 participants