Closed
Description
I tried this code:
enum A {
A1,
A2,
A3,
}
enum B {
B1(String, String),
B2(String, String),
}
fn consume_b(_b: B) {}
fn main() {
let a = A::A1;
loop {
let ctor = match a {
A3 => break,
A1 => B::B1,
A2 => B::B2,
};
consume_b(ctor("1".into(), "2".into()));
break;
}
}
then, rustc crashes with this message.
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: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'assertion failed: !self.tables.borrow().adjustments.contains_key(&expr.id)', /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/librustc_typeck/check/coercion.rs:695
stack backtrace:
1: 0x7f363c0fe40c - std::sys::imp::backtrace::tracing::imp::write::hf33ae72d0baa11ed
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:42
2: 0x7f363c10c9ae - std::panicking::default_hook::{{closure}}::h59672b733cc6a455
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panicking.rs:351
3: 0x7f363c10c553 - std::panicking::default_hook::h1670459d2f3f8843
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panicking.rs:361
4: 0x7f363c10ce4b - std::panicking::rust_panic_with_hook::hcf0ddb069e7beee7
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/panicking.rs:555
5: 0x7f363aa3e1af - std::panicking::begin_panic::he1a21c7d2bfbc925
6: 0x7f363aaa557b - rustc_typeck::check::_match::<impl rustc_typeck::check::FnCtxt<'a, 'gcx, 'tcx>>::check_match::h9b6e1aca41975d59
7: 0x7f363ab1c936 - rustc_typeck::check::FnCtxt::check_expr_kind::h34a8082c3fb5738a
8: 0x7f363ab1c1ed - rustc_typeck::check::FnCtxt::check_expr_with_expectation_and_lvalue_pref::h7ef9ef0888ee8a49
9: 0x7f363ab2dbdd - rustc_typeck::check::FnCtxt::check_decl_initializer::haaea47c4d358654e
10: 0x7f363ab2dce4 - rustc_typeck::check::FnCtxt::check_decl_local::h1b35be9466600360
11: 0x7f363ab2e016 - rustc_typeck::check::FnCtxt::check_stmt::h432c28cb9771ab73
12: 0x7f363ab2e36e - rustc_typeck::check::FnCtxt::check_block_with_expected::h5a97aba5369a0e70
13: 0x7f363ab1c7db - rustc_typeck::check::FnCtxt::check_expr_kind::h34a8082c3fb5738a
14: 0x7f363ab1c1ed - rustc_typeck::check::FnCtxt::check_expr_with_expectation_and_lvalue_pref::h7ef9ef0888ee8a49
15: 0x7f363ab2e3b7 - rustc_typeck::check::FnCtxt::check_block_with_expected::h5a97aba5369a0e70
16: 0x7f363ab1c62e - rustc_typeck::check::FnCtxt::check_expr_kind::h34a8082c3fb5738a
17: 0x7f363ab1c1ed - rustc_typeck::check::FnCtxt::check_expr_with_expectation_and_lvalue_pref::h7ef9ef0888ee8a49
18: 0x7f363ab02671 - rustc_typeck::check::check_fn::ha6fc77ffa200fbd2
19: 0x7f363ab01684 - rustc_typeck::check::check_bare_fn::h9f0916104d636ee0
20: 0x7f363aafe875 - rustc_typeck::check::check_item_bodies::hd9e8c6a8692f314b
21: 0x7f363ab6c497 - rustc_typeck::check_crate::h8c159f70d1009b33
22: 0x7f363c4aacd7 - rustc_driver::driver::phase_3_run_analysis_passes::{{closure}}::h040eea107b0d299b
23: 0x7f363c4a76c6 - rustc_driver::driver::phase_3_run_analysis_passes::haec055f3322a38aa
24: 0x7f363c48b150 - rustc_driver::driver::compile_input::hd9f060ee16a643fb
25: 0x7f363c4d5844 - rustc_driver::run_compiler::h762802568c0e140e
26: 0x7f363c3e1edb - std::panicking::try::do_call::h935e2f773deaf841
27: 0x7f363c115c8a - __rust_maybe_catch_panic
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libpanic_unwind/lib.rs:98
28: 0x7f363c40a112 - <F as alloc::boxed::FnBox<A>>::call_box::he43811d1f6894655
29: 0x7f363c10b804 - std::sys::imp::thread::Thread::new::thread_start::he668872ac11287ba
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/liballoc/boxed.rs:624
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/sys_common/thread.rs:21
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libstd/sys/unix/thread.rs:84
30: 0x7f3634bc66c9 - start_thread
31: 0x7f363bdc50ae - __clone
32: 0x0 - <unknown>
Meta
rustc --version --verbose
:
rustc 1.16.0 (30cf806ef 2017-03-10)
binary: rustc
commit-hash: 30cf806ef8881c41821fbd43e5cf3699c5290c16
commit-date: 2017-03-10
host: x86_64-unknown-linux-gnu
release: 1.16.0
LLVM version: 3.9
Note
- When the
break
arm isn't the first, ICE doesn't occur. - When the arms are only 2, ICE doesn't occure