Skip to content

ICE: Slice pattern matching with constant slice and slice literal #55911

@Brekcel

Description

@Brekcel

Attempting to pattern match a slice with a constant value and THEN a slice literal causes an ICE.

Simple test case:

fn main() { let s = &[0x00; 4][..]; //Slice of any value const MAGIC_TEST: &[u8] = b"TEST"; //Const slice to pattern match with match s { MAGIC_TEST => (), [0x00, 0x00, 0x00, 0x00] => (),	_ => () } }

However simply changing the order to test the slice literal and then the const slice compiles fine:

//Compiles fine fn main() { let s = &[0x00; 4][..]; //Slice of any value const MAGIC_TEST: &[u8] = b"TEST"; //Const slice to pattern match with match s { [0x00, 0x00, 0x00, 0x00] => (), // Only thing changes was the order of these 2 MAGIC_TEST => (), // Only thing changes was the order of these 2	_ => () } }

Error message:

B:\slice_ice>cargo run --verbose Compiling slice_ice v0.1.0 (B:\slice_ice) Running `rustc --crate-name slice_ice src\main.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=f42f6a124a503700 -C extra-filename=-f42f6a124a503700 --out-dir B:\slice_ice\target\debug\deps -C incremental=B:\slice_ice\target\debug\incremental -L dependency=B:\slice_ice\target\debug\deps` error: internal compiler error: librustc_mir\hair\pattern\_match.rs:1679: unexpected const-val Const { ty: &[u8], val: ScalarPair(Ptr(Pointer { alloc_id: AllocId(1), offset: Size { raw: 0 } }), Scalar(Bits { size: 8, bits: 4 })) } with ctor Slice(4) --> src\main.rs:5:3 | 5 | MAGIC_TEST => (), | ^^^^^^^^^^ thread 'main' panicked at 'Box<Any>', librustc_errors\lib.rs:525:9 stack backtrace: 0: <std::sys::windows::args::Args as core::ops::drop::Drop>::drop 1: <std::ffi::os_str::OsString as std::sys_common::IntoInner<std::sys::windows::os_str::Buf>>::into_inner 2: std::panicking::take_hook 3: std::panicking::take_hook 4: <rustc::ty::sty::Binder<rustc::ty::ProjectionPredicate<'tcx>> as rustc::ty::ToPredicate<'tcx>>::to_predicate 5: std::panicking::rust_panic_with_hook 6: <rustc_mir::build::scope::BreakableScope<'tcx> as core::fmt::Debug>::fmt 7: <rustc_mir::dataflow::graphviz::Edge as core::fmt::Debug>::fmt 8: <unknown> 9: <unknown> 10: <unknown> 11: <unknown> 12: <rustc_mir::dataflow::graphviz::Edge as core::fmt::Debug>::fmt 13: <rustc_mir::dataflow::graphviz::Edge as core::fmt::Debug>::fmt 14: rustc_mir::hair::pattern::_match::split_grouped_constructors::range_borders 15: <unknown> 16: <rustc_mir::hair::pattern::_match::Matrix<'a, 'tcx> as core::fmt::Debug>::fmt 17: <unknown> 18: <rustc_mir::hair::pattern::_match::Matrix<'a, 'tcx> as core::fmt::Debug>::fmt 19: <rustc_mir::hair::pattern::_match::Matrix<'a, 'tcx> as core::fmt::Debug>::fmt 20: <unknown> 21: <rustc_mir::hair::pattern::_match::Matrix<'a, 'tcx> as core::fmt::Debug>::fmt 22: <rustc_mir::hair::pattern::check_match::MatchVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_body 23: <rustc_mir::hair::pattern::_match::Matrix<'a, 'tcx> as core::fmt::Debug>::fmt 24: <rustc_mir::hair::pattern::check_match::MatchVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_expr 25: <rustc_mir::hair::pattern::check_match::MatchVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_expr 26: <rustc_mir::hair::pattern::check_match::MatchVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_body 27: rustc_mir::hair::pattern::check_match::check_crate 28: rustc::ty::query::on_disk_cache::__ty_decoder_impl::<impl serialize::serialize::Decoder for rustc::ty::query::on_disk_cache::CacheDecoder<'a, 'tcx, 'x>>::read_str 29: rustc::ty::context::tls::track_diagnostic 30: rustc::dep_graph::graph::DepGraph::assert_ignored 31: rustc::ty::context::tls::track_diagnostic 32: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack 33: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::try_print_query_stack 34: rustc::ty::query::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::check_match 35: <rustc_mir::dataflow::move_paths::abs_domain::AbstractOperand as core::fmt::Debug>::fmt 36: rustc_mir::dataflow::impls::MaybeUninitializedPlaces::new 37: rustc_mir::hair::pattern::check_match::check_crate 38: <unknown> 39: <rustc_driver::pretty::IdentifiedAnnotation<'hir> as rustc_driver::pretty::HirPrinterSupport<'hir>>::sess 40: <rustc_driver::CompilationFailure as core::fmt::Debug>::fmt 41: rustc_driver::driver::compile_input 42: rustc_driver::run_compiler 43: <env_logger::filter::inner::Filter as core::fmt::Display>::fmt 44: rustc_driver::run_compiler 45: <env_logger::filter::inner::Filter as core::fmt::Display>::fmt 46: _rust_maybe_catch_panic 47: rustc_driver::profile::dump 48: rustc_driver::main 49: <unknown> 50: std::panicking::update_panic_count 51: _rust_maybe_catch_panic 52: std::rt::lang_start_internal 53: <unknown> 54: <unknown> 55: BaseThreadInitThunk 56: RtlUserThreadStart query stack during panic: #0 [check_match] processing `main` end of query stack error: aborting due to previous error 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.30.1 (1433507eb 2018-11-07) running on x86_64-pc-windows-msvc note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin note: some of the compiler flags provided by cargo are hidden error: Could not compile `slice_ice`. Caused by: process didn't exit successfully: `rustc --crate-name slice_ice src\main.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=f42f6a124a503700 -C extra-filename=-f42f6a124a503700 --out-dir B:\slice_ice\target\debug\deps -C incremental=B:\slice_ice\target\debug\incremental -L dependency=B:\slice_ice\target\debug\deps` (exit code: 101) 

rustc version:

B:\slice_ice>rustc --version --verbose rustc 1.30.1 (1433507eb 2018-11-07) binary: rustc commit-hash: 1433507eba7d1a114e4c6f27ae0e1a74f60f20de commit-date: 2018-11-07 host: x86_64-pc-windows-msvc release: 1.30.1 LLVM version: 8.0 

Metadata

Metadata

Assignees

Labels

I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions