Closed
Description
Note: this only occurs when the type of the code block is a result. Removing the Ok
line and swapping ?
for .unwrap()
does not yield the ICE.
Code
//! Library
//!
//! ```
//! use rustice::sub;
//!
//! let x = sub::make_struct()?;
//!
//! assert!(matches!(x, sub::En::A(sub::B { inner: vec![], .. })));
//! Ok::<(), &'static str>(())
//! ```
pub mod sub {
pub enum En {
A(B),
}
pub struct B {
inner: Vec<u8>,
}
pub fn make_struct() -> Result<En, &'static str> {
Ok(En::A(B { inner: vec![] }))
}
impl B {
pub fn inner(&self) -> &Vec<u8> {
&self.inner
}
}
}
Meta
rustc --version --verbose
:
rustc 1.55.0 (c8dfcfe04 2021-09-06)
binary: rustc
commit-hash: c8dfcfe046a7680554bf4eb612bad840e7631c4b
commit-date: 2021-09-06
host: x86_64-unknown-linux-gnu
release: 1.55.0
LLVM version: 12.0.1
and after a rustup, (still getting the same ICE):
rustc 1.57.0 (f1edd0429 2021-11-29)
binary: rustc
commit-hash: f1edd0429582dd29cccacaf50fd134b05593bd9c
commit-date: 2021-11-29
host: x86_64-unknown-linux-gnu
release: 1.57.0
LLVM version: 13.0.0
Error output
$ cargo test --doc
Compiling rustice v0.1.0 (/home/ian/src/rust-ice)
Finished test [unoptimized + debuginfo] target(s) in 0.20s
Doc-tests rustice
running 1 test
test src/lib.rs - (line 3) ... FAILED
failures:
---- src/lib.rs - (line 3) stdout ----
error: arbitrary expressions aren't allowed in patterns
--> src/lib.rs:8:48
|
8 | assert!(matches!(x, sub::En::A(sub::B { inner: vec![], .. })));
| ^^^^^^
|
= note: this error originates in the macro `vec` (in Nightly builds, run with -Z macro-backtrace for more info)
error: internal compiler error: compiler/rustc_mir_build/src/thir/pattern/mod.rs:558:22: not a literal: Expr { hir_id: HirId { owner: DefId(0:5 ~ rust_out[6150]::main::_doctest_main_src_lib_rs_3_0), local_id: 39 }, kind: Call(Expr { hir_id: HirId { owner: DefId(0:5 ~ rust_out[6150]::main::_doctest_main_src_lib_rs_3_0), local_id: 38 }, kind: Path(TypeRelative(Ty { hir_id: HirId { owner: DefId(0:5 ~ rust_out[6150]::main::_doctest_main_src_lib_rs_3_0), local_id: 36 }, kind: Path(Resolved(None, Path { span: /home/ian/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/macros.rs:43:36: 43:52 (#6), res: Def(Struct, DefId(5:6801 ~ alloc[197d]::vec::Vec)), segments: [PathSegment { ident: $crate#6, hir_id: Some(HirId { owner: DefId(0:5 ~ rust_out[6150]::main::_doctest_main_src_lib_rs_3_0), local_id: 33 }), res: Some(Err), args: None, infer_args: true }, PathSegment { ident: vec#6, hir_id: Some(HirId { owner: DefId(0:5 ~ rust_out[6150]::main::_doctest_main_src_lib_rs_3_0), local_id: 34 }), res: Some(Def(Mod, DefId(5:6024 ~ alloc[197d]::vec))), args: None, infer_args: true }, PathSegment { ident: Vec#6, hir_id: Some(HirId { owner: DefId(0:5 ~ rust_out[6150]::main::_doctest_main_src_lib_rs_3_0), local_id: 35 }), res: Some(Err), args: None, infer_args: true }] })), span: /home/ian/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/macros.rs:43:36: 43:52 (#6) }, PathSegment { ident: new#6, hir_id: Some(HirId { owner: DefId(0:5 ~ rust_out[6150]::main::_doctest_main_src_lib_rs_3_0), local_id: 37 }), res: Some(Err), args: None, infer_args: true })), span: /home/ian/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/macros.rs:43:36: 43:57 (#6) }, []), span: /home/ian/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/macros.rs:43:36: 43:59 (#6) }
--> src/lib.rs:8:48
|
8 | assert!(matches!(x, sub::En::A(sub::B { inner: vec![], .. })));
| ^^^^^^
|
= note: this error: internal compiler error originates in the macro `vec` (in Nightly builds, run with -Z macro-backtrace for more info)
thread 'rustc' panicked at 'Box<dyn Any>', /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b/compiler/rustc_errors/src/lib.rs:980:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
note: 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-compiler&template=ice.md
note: rustc 1.55.0 (c8dfcfe04 2021-09-06) running on x86_64-unknown-linux-gnu
note: compiler flags: -C codegen-units=1 -C embed-bitcode=no --crate-type bin
query stack during panic:
#0 [thir_body] building THIR for `main::_doctest_main_src_lib_rs_3_0`
#1 [mir_built] building MIR for `main::_doctest_main_src_lib_rs_3_0`
end of query stack
error: aborting due to 2 previous errors
Couldn't compile the test.
failures:
src/lib.rs - (line 3)
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
error: test failed, to rerun pass '--doc'
Backtrace
thread 'rustc' panicked at 'Box<dyn Any>', /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b/compiler/rustc_errors/src/lib.rs:980:9
stack backtrace:
0: std::panicking::begin_panic
1: std::panic::panic_any
2: rustc_errors::HandlerInner::span_bug
3: rustc_errors::Handler::span_bug
4: rustc_middle::ty::context::tls::with_opt
5: rustc_middle::util::bug::opt_span_bug_fmt
6: rustc_middle::util::bug::span_bug_fmt
7: rustc_mir_build::thir::pattern::PatCtxt::lower_lit
8: rustc_mir_build::thir::pattern::PatCtxt::lower_pattern
9: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
10: rustc_mir_build::thir::pattern::PatCtxt::lower_pattern
11: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
12: rustc_mir_build::thir::pattern::PatCtxt::lower_pattern
13: rustc_mir_build::thir::pattern::pat_from_hir
14: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::convert_arm
15: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
16: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
17: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
18: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
19: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
20: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
21: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
22: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
23: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
24: rustc_mir_build::thir::cx::block::<impl rustc_mir_build::thir::cx::Cx>::mirror_block
25: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
26: rustc_mir_build::thir::cx::expr::<impl rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
27: rustc_mir_build::thir::cx::thir_body
28: rustc_query_system::query::plumbing::get_query_impl
29: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::thir_body
30: rustc_infer::infer::InferCtxtBuilder::enter
31: rustc_mir_build::build::mir_built
32: rustc_query_system::query::plumbing::get_query_impl
33: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_built
34: rustc_mir::transform::check_unsafety::unsafety_check_result
35: core::ops::function::FnOnce::call_once
36: rustc_query_system::query::plumbing::get_query_impl
37: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::unsafety_check_result
38: rustc_mir::transform::mir_const
39: rustc_query_system::query::plumbing::get_query_impl
40: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_const
41: rustc_mir::transform::mir_promoted
42: rustc_query_system::query::plumbing::get_query_impl
43: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_promoted
44: rustc_mir::borrow_check::mir_borrowck
45: core::ops::function::FnOnce::call_once
46: rustc_query_system::query::plumbing::get_query_impl
47: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_borrowck
48: rustc_typeck::collect::type_of::type_of
49: rustc_query_system::query::plumbing::get_query_impl
50: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::type_of
51: rustc_typeck::check::check::check_item_type
52: rustc_middle::hir::map::Map::visit_item_likes_in_module
53: rustc_typeck::check::check::check_mod_item_types
54: rustc_query_system::query::plumbing::get_query_impl
55: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::check_mod_item_types
56: rustc_session::utils::<impl rustc_session::session::Session>::time
57: rustc_typeck::check_crate
58: rustc_interface::passes::analysis
59: rustc_query_system::query::plumbing::get_query_impl
60: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::analysis
61: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
62: rustc_span::with_source_map
63: rustc_interface::interface::create_compiler_and_run
64: scoped_tls::ScopedKey<T>::set
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.