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

Closure doesn't capture match scrutinee in case of slice pattern #111751

Closed
HKalbasi opened this issue May 19, 2023 · 2 comments · Fixed by #111831
Closed

Closure doesn't capture match scrutinee in case of slice pattern #111751

HKalbasi opened this issue May 19, 2023 · 2 comments · Fixed by #111831
Assignees
Labels
C-bug Category: This is a bug. 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.

Comments

@HKalbasi
Copy link
Member

HKalbasi commented May 19, 2023

Code

fn main() {
    let x: &[i32] = &[1, 2, 3];
    let c = || match *x {
        [_] => 1,
        [_, _] => 2,
        [_, _, _] => 3,
        _ => 10,
    };
    println!("{}", core::mem::size_of_val(&c))
}

Error output

  Compiling playground v0.0.1 (/playground)
thread 'rustc' panicked at 'called `Option::unwrap()` on a `None` value', compiler/rustc_mir_build/src/build/expr/as_place.rs:256:31
stack backtrace:
   0:     0x7fac59f186f1 - std::backtrace_rs::backtrace::libunwind::trace::ha0547a5335ba6eb8
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7fac59f186f1 - std::backtrace_rs::backtrace::trace_unsynchronized::h597700f2649fb43a
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7fac59f186f1 - std::sys_common::backtrace::_print_fmt::ha306a728a864b1ec
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x7fac59f186f1 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h60926fa2ed907188
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7fac59f78bef - core::fmt::rt::Argument::fmt::hbfab9f7ca3ec46a1
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/core/src/fmt/rt.rs:138:9
   5:     0x7fac59f78bef - core::fmt::write::he942607094ccdb30
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/core/src/fmt/mod.rs:1094:21
   6:     0x7fac59f0b9f1 - std::io::Write::write_fmt::hf8f718f51475564f
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/io/mod.rs:1712:15
   7:     0x7fac59f18505 - std::sys_common::backtrace::_print::h069f307f286f01b8
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7fac59f18505 - std::sys_common::backtrace::print::h3024c4761bf76173
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7fac59f1b177 - std::panicking::default_hook::{{closure}}::h32ba135d303524b9
  10:     0x7fac59f1af64 - std::panicking::default_hook::hd5920ecdc023cc57
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/panicking.rs:288:9
  11:     0x7fac5d08238b - rustc_driver_impl[11297d21f3442eb3]::install_ice_hook::{closure#0}
  12:     0x7fac59f1b897 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h50fbac85275e3d54
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/alloc/src/boxed.rs:1999:9
  13:     0x7fac59f1b897 - std::panicking::rust_panic_with_hook::h904e506787ae7ee1
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/panicking.rs:695:13
  14:     0x7fac59f1b5d1 - std::panicking::begin_panic_handler::{{closure}}::h5222fe796d39ff56
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/panicking.rs:580:13
  15:     0x7fac59f18b26 - std::sys_common::backtrace::__rust_end_short_backtrace::h7a1e0e290e329ce5
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/sys_common/backtrace.rs:151:18
  16:     0x7fac59f1b382 - rust_begin_unwind
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/panicking.rs:578:5
  17:     0x7fac59f74e73 - core::panicking::panic_fmt::hbfb35e1471f52240
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/core/src/panicking.rs:67:14
  18:     0x7fac59f74f03 - core::panicking::panic::hb25bd1777f71c0c7
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/core/src/panicking.rs:117:5
  19:     0x7fac5b398eb4 - <rustc_mir_build[598a76b9bbba6696]::build::expr::as_place::PlaceBuilder>::to_place
  20:     0x7fac5c289c96 - <rustc_mir_build[598a76b9bbba6696]::build::Builder>::match_simplified_candidates
  21:     0x7fac5c292745 - <rustc_mir_build[598a76b9bbba6696]::build::Builder>::match_candidates
  22:     0x7fac5b3a1d97 - <rustc_mir_build[598a76b9bbba6696]::build::Builder>::lower_match_tree
  23:     0x7fac5b38e507 - <rustc_mir_build[598a76b9bbba6696]::build::Builder>::expr_into_dest
  24:     0x7fac5b38c106 - <rustc_mir_build[598a76b9bbba6696]::build::Builder>::expr_into_dest
  25:     0x7fac5b38c106 - <rustc_mir_build[598a76b9bbba6696]::build::Builder>::expr_into_dest
  26:     0x7fac5be72c6d - rustc_mir_build[598a76b9bbba6696]::build::mir_built
  27:     0x7fac5b14247c - rustc_query_impl[c44f9c9108d77c0f]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::mir_built::{closure#2}::{closure#0}, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>
  28:     0x7fac5b14245e - <rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::mir_built::{closure#2} as core[4434429b7305d0b8]::ops::function::FnOnce<(rustc_middle[4996dda2e843c480]::ty::context::TyCtxt, rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId)>>::call_once
  29:     0x7fac5b236280 - rustc_query_system[af5f8ea193900a95]::query::plumbing::try_execute_query::<rustc_query_impl[c44f9c9108d77c0f]::DynamicConfig<rustc_query_system[af5f8ea193900a95]::query::caches::VecCache<rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[c44f9c9108d77c0f]::plumbing::QueryCtxt, false>
  30:     0x7fac5ca48081 - rustc_query_impl[c44f9c9108d77c0f]::get_query_non_incr::mir_built::__rust_end_short_backtrace
  31:     0x7fac5c0e08a3 - rustc_mir_transform[969ccd5cf54731df]::check_unsafety::unsafety_check_result
  32:     0x7fac5b1424bc - rustc_query_impl[c44f9c9108d77c0f]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::unsafety_check_result::{closure#2}::{closure#0}, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>
  33:     0x7fac5b14249e - <rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::unsafety_check_result::{closure#2} as core[4434429b7305d0b8]::ops::function::FnOnce<(rustc_middle[4996dda2e843c480]::ty::context::TyCtxt, rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId)>>::call_once
  34:     0x7fac5b236280 - rustc_query_system[af5f8ea193900a95]::query::plumbing::try_execute_query::<rustc_query_impl[c44f9c9108d77c0f]::DynamicConfig<rustc_query_system[af5f8ea193900a95]::query::caches::VecCache<rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[c44f9c9108d77c0f]::plumbing::QueryCtxt, false>
  35:     0x7fac5ca49f31 - rustc_query_impl[c44f9c9108d77c0f]::get_query_non_incr::unsafety_check_result::__rust_end_short_backtrace
  36:     0x7fac5c0e3952 - rustc_mir_transform[969ccd5cf54731df]::check_unsafety::unsafety_check_result
  37:     0x7fac5b1424bc - rustc_query_impl[c44f9c9108d77c0f]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::unsafety_check_result::{closure#2}::{closure#0}, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>
  38:     0x7fac5b14249e - <rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::unsafety_check_result::{closure#2} as core[4434429b7305d0b8]::ops::function::FnOnce<(rustc_middle[4996dda2e843c480]::ty::context::TyCtxt, rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId)>>::call_once
  39:     0x7fac5b236280 - rustc_query_system[af5f8ea193900a95]::query::plumbing::try_execute_query::<rustc_query_impl[c44f9c9108d77c0f]::DynamicConfig<rustc_query_system[af5f8ea193900a95]::query::caches::VecCache<rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[c44f9c9108d77c0f]::plumbing::QueryCtxt, false>
  40:     0x7fac5ca49f31 - rustc_query_impl[c44f9c9108d77c0f]::get_query_non_incr::unsafety_check_result::__rust_end_short_backtrace
  41:     0x7fac5c44aff5 - rustc_mir_transform[969ccd5cf54731df]::mir_const
  42:     0x7fac5b17793e - rustc_query_impl[c44f9c9108d77c0f]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::mir_const::{closure#2}::{closure#0}, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>
  43:     0x7fac5b17790e - <rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::mir_const::{closure#2} as core[4434429b7305d0b8]::ops::function::FnOnce<(rustc_middle[4996dda2e843c480]::ty::context::TyCtxt, rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId)>>::call_once
  44:     0x7fac5b236280 - rustc_query_system[af5f8ea193900a95]::query::plumbing::try_execute_query::<rustc_query_impl[c44f9c9108d77c0f]::DynamicConfig<rustc_query_system[af5f8ea193900a95]::query::caches::VecCache<rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[c44f9c9108d77c0f]::plumbing::QueryCtxt, false>
  45:     0x7fac5ca48181 - rustc_query_impl[c44f9c9108d77c0f]::get_query_non_incr::mir_const::__rust_end_short_backtrace
  46:     0x7fac5be9a97b - rustc_mir_transform[969ccd5cf54731df]::mir_promoted
  47:     0x7fac5b13d15f - rustc_query_impl[c44f9c9108d77c0f]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::mir_promoted::{closure#2}::{closure#0}, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 16usize]>>
  48:     0x7fac5b99d698 - rustc_query_system[af5f8ea193900a95]::query::plumbing::try_execute_query::<rustc_query_impl[c44f9c9108d77c0f]::DynamicConfig<rustc_query_system[af5f8ea193900a95]::query::caches::VecCache<rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 16usize]>>, false, false, false>, rustc_query_impl[c44f9c9108d77c0f]::plumbing::QueryCtxt, false>
  49:     0x7fac5ca485c7 - rustc_query_impl[c44f9c9108d77c0f]::get_query_non_incr::mir_promoted::__rust_end_short_backtrace
  50:     0x7fac5bf86b0c - rustc_borrowck[87d11f0aa57bf078]::mir_borrowck
  51:     0x7fac5b1778de - rustc_query_impl[c44f9c9108d77c0f]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::mir_borrowck::{closure#2}::{closure#0}, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>
  52:     0x7fac5b1778ae - <rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::mir_borrowck::{closure#2} as core[4434429b7305d0b8]::ops::function::FnOnce<(rustc_middle[4996dda2e843c480]::ty::context::TyCtxt, rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId)>>::call_once
  53:     0x7fac5b236280 - rustc_query_system[af5f8ea193900a95]::query::plumbing::try_execute_query::<rustc_query_impl[c44f9c9108d77c0f]::DynamicConfig<rustc_query_system[af5f8ea193900a95]::query::caches::VecCache<rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[c44f9c9108d77c0f]::plumbing::QueryCtxt, false>
  54:     0x7fac5ca4a381 - rustc_query_impl[c44f9c9108d77c0f]::get_query_non_incr::mir_borrowck::__rust_end_short_backtrace
  55:     0x7fac5c59b67e - rustc_data_structures[b08b489b4cdf5f63]::sync::par_for_each_in::<&[rustc_span[ee77a0ef2703f5aa]::def_id::LocalDefId], <rustc_middle[4996dda2e843c480]::hir::map::Map>::par_body_owners<rustc_interface[bf9d7b52826e2146]::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>
  56:     0x7fac5c59b396 - <rustc_session[81c0ead03495bb02]::session::Session>::time::<(), rustc_interface[bf9d7b52826e2146]::passes::analysis::{closure#1}>
  57:     0x7fac5c59ad9f - rustc_interface[bf9d7b52826e2146]::passes::analysis
  58:     0x7fac5c5c59fa - rustc_query_impl[c44f9c9108d77c0f]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::analysis::{closure#2}::{closure#0}, rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 1usize]>>
  59:     0x7fac5c5c59e9 - <rustc_query_impl[c44f9c9108d77c0f]::dynamic_query::analysis::{closure#2} as core[4434429b7305d0b8]::ops::function::FnOnce<(rustc_middle[4996dda2e843c480]::ty::context::TyCtxt, ())>>::call_once
  60:     0x7fac5c791e64 - rustc_query_system[af5f8ea193900a95]::query::plumbing::try_execute_query::<rustc_query_impl[c44f9c9108d77c0f]::DynamicConfig<rustc_query_system[af5f8ea193900a95]::query::caches::SingleCache<rustc_middle[4996dda2e843c480]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[c44f9c9108d77c0f]::plumbing::QueryCtxt, false>
  61:     0x7fac5c791c49 - rustc_query_impl[c44f9c9108d77c0f]::get_query_non_incr::analysis::__rust_end_short_backtrace
  62:     0x7fac5c764eef - <rustc_middle[4996dda2e843c480]::ty::context::GlobalCtxt>::enter::<rustc_driver_impl[11297d21f3442eb3]::run_compiler::{closure#1}::{closure#2}::{closure#4}, core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>>
  63:     0x7fac5c316ecf - <rustc_interface[bf9d7b52826e2146]::interface::Compiler>::enter::<rustc_driver_impl[11297d21f3442eb3]::run_compiler::{closure#1}::{closure#2}, core[4434429b7305d0b8]::result::Result<core[4434429b7305d0b8]::option::Option<rustc_interface[bf9d7b52826e2146]::queries::Linker>, rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>>
  64:     0x7fac5c314bfd - <scoped_tls[32a73cfd30817de0]::ScopedKey<rustc_span[ee77a0ef2703f5aa]::SessionGlobals>>::set::<rustc_interface[bf9d7b52826e2146]::interface::run_compiler<core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>, rustc_driver_impl[11297d21f3442eb3]::run_compiler::{closure#1}>::{closure#0}, core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>>
  65:     0x7fac5c314056 - std[bc266c592f396f35]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[bf9d7b52826e2146]::util::run_in_thread_pool_with_globals<rustc_interface[bf9d7b52826e2146]::interface::run_compiler<core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>, rustc_driver_impl[11297d21f3442eb3]::run_compiler::{closure#1}>::{closure#0}, core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>>
  66:     0x7fac5c943265 - <<std[bc266c592f396f35]::thread::Builder>::spawn_unchecked_<rustc_interface[bf9d7b52826e2146]::util::run_in_thread_pool_with_globals<rustc_interface[bf9d7b52826e2146]::interface::run_compiler<core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>, rustc_driver_impl[11297d21f3442eb3]::run_compiler::{closure#1}>::{closure#0}, core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[4434429b7305d0b8]::result::Result<(), rustc_span[ee77a0ef2703f5aa]::ErrorGuaranteed>>::{closure#1} as core[4434429b7305d0b8]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  67:     0x7fac59f25d45 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h284ea0362d17b1a9
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/alloc/src/boxed.rs:1985:9
  68:     0x7fac59f25d45 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h4cdb6c0705a7967c
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/alloc/src/boxed.rs:1985:9
  69:     0x7fac59f25d45 - std::sys::unix::thread::Thread::new::thread_start::hca4af62dde160e36
                               at /rustc/d3f416dc063fc478c7250873246cb2d4136d8c42/library/std/src/sys/unix/thread.rs:108:17
  70:     0x7fac59df5609 - start_thread
  71:     0x7fac59d18133 - clone
  72:                0x0 - <unknown>

error: 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.71.0-nightly (d3f416dc0 2023-05-18) running on x86_64-unknown-linux-gnu

note: compiler flags: --crate-type bin -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
#0 [mir_built] building MIR for `main::{closure#0}`
#1 [unsafety_check_result] unsafety-checking `main::{closure#0}`
#2 [unsafety_check_result] unsafety-checking `main`
#3 [mir_const] preparing `main` for borrow checking
#4 [mir_promoted] promoting constants in MIR for `main`
#5 [mir_borrowck] borrow-checking `main`
#6 [analysis] running analysis passes on this crate
end of query stack
error: could not compile `playground` (bin "playground")
@HKalbasi HKalbasi added C-bug Category: This is a bug. 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. labels May 19, 2023
@scottmcm
Copy link
Member

scottmcm commented May 19, 2023

Works in edition 2015 https://rust.godbolt.org/z/36dez39sd

Looks like it's been broken in 2021 basically forever -- the edition was stabilized in 1.56 and it's broken in that version https://rust.godbolt.org/z/az334azf1

@zirconium-n
Copy link
Contributor

@rustbot claim

I will have a look on this.

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue May 25, 2023
…illot

Always capture slice when pattern requires checking the length

Fixes rust-lang#111751

cc `@zirconium-n,` I see you were assigned to this but I've fixed some similar issues in the past and had an idea on how to investigate this.
@bors bors closed this as completed in dbdb509 May 26, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. 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.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants