Skip to content

ICE: refutable patterns should always have a place to inspect #138958

Closed
@meithecatte

Description

@meithecatte

Code

pub fn match_const(x: (u32, u32)) {
    let _ = || {
        let ((0, a) | (a, _)) = x;
        a
    };
}

This compiles correctly on 1.86.0-beta.7, but ICE's on latest nightly.

Found this when working on fixing #137467, but it's a different ICE that regressed more recently.

Meta

rustc --version --verbose:

rustc 1.87.0-nightly (f8c27dfe1 2025-03-24)
binary: rustc
commit-hash: f8c27dfe1a2e7fb538fd91dad53de06992c7c967
commit-date: 2025-03-24
host: x86_64-unknown-linux-gnu
release: 1.87.0-nightly
LLVM version: 20.1.1

Error output

thread 'rustc' panicked at compiler/rustc_mir_build/src/builder/matches/match_pair.rs:324:30:
refutable patterns should always have a place to inspect
stack backtrace:
   0:     0x7e7ea845b103 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h28dee7d485be4565
   1:     0x7e7ea8c05b51 - core::fmt::write::hed49133ebafc512c
   2:     0x7e7eaa03eed1 - std::io::Write::write_fmt::h96c675eab0761829
   3:     0x7e7ea845af62 - std::sys::backtrace::BacktraceLock::print::hd150077b5b92907f
   4:     0x7e7ea845d81a - std::panicking::default_hook::{{closure}}::hc334eb150ecfad71
   5:     0x7e7ea845d39f - std::panicking::default_hook::hc8f52b0496dd1041
   6:     0x7e7ea74d1330 - std[7b5691ee7d4d07df]::panicking::update_hook::<alloc[2981cecefd3fc5a4]::boxed::Box<rustc_driver_impl[611c1addf2cce3f]::install_ice_hook::{closure#1}>>::{closure#0}
   7:     0x7e7ea845e093 - std::panicking::rust_panic_with_hook::hf6182f7da084b07a
   8:     0x7e7ea845dd8a - std::panicking::begin_panic_handler::{{closure}}::h426997ed379719db
   9:     0x7e7ea845b5d9 - std::sys::backtrace::__rust_end_short_backtrace::he32ae5677b462ba7
  10:     0x7e7ea845da4d - __rustc[561f529fb5ae8f23]::rust_begin_unwind
  11:     0x7e7ea4e86610 - core::panicking::panic_fmt::he1d506ecd9f48b46
  12:     0x7e7ea61912db - core::option::expect_failed::hf2ca6a55dab3586d
  13:     0x7e7ea94e30ff - <rustc_mir_build[af875f067a42dab4]::builder::matches::MatchPairTree>::for_pattern
  14:     0x7e7ea94eaf39 - <rustc_mir_build[af875f067a42dab4]::builder::Builder>::lower_match_tree
  15:     0x7e7ea94e77de - <rustc_mir_build[af875f067a42dab4]::builder::Builder>::place_into_pattern
  16:     0x7e7ea98f0c6c - <rustc_mir_build[af875f067a42dab4]::builder::Builder>::ast_block_stmts
  17:     0x7e7ea98ef3c5 - <rustc_mir_build[af875f067a42dab4]::builder::Builder>::ast_block
  18:     0x7e7ea8eee04d - <rustc_mir_build[af875f067a42dab4]::builder::Builder>::expr_into_dest
  19:     0x7e7ea8eefef9 - <rustc_mir_build[af875f067a42dab4]::builder::Builder>::expr_into_dest
  20:     0x7e7ea94eeb05 - rustc_mir_build[af875f067a42dab4]::builder::build_mir
  21:     0x7e7ea8c09cf5 - rustc_mir_transform[9fde636ca56913ae]::mir_built
  22:     0x7e7ea8c09cc7 - rustc_query_impl[5378ca482bd296bb]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5378ca482bd296bb]::query_impl::mir_built::dynamic_query::{closure#2}::{closure#0}, rustc_middle[7d28cec7e9fc3932]::query::erase::Erased<[u8; 8usize]>>
  23:     0x7e7ea8ff3a2c - rustc_query_system[a2be9dcacbe77f66]::query::plumbing::try_execute_query::<rustc_query_impl[5378ca482bd296bb]::DynamicConfig<rustc_data_structures[5ba4159916cb5ba7]::vec_cache::VecCache<rustc_span[a5c1eac4cdc714d]::def_id::LocalDefId, rustc_middle[7d28cec7e9fc3932]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[a2be9dcacbe77f66]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[5378ca482bd296bb]::plumbing::QueryCtxt, false>
  24:     0x7e7ea8ff354b - rustc_query_impl[5378ca482bd296bb]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace
  25:     0x7e7ea9756a4e - <rustc_mir_build[af875f067a42dab4]::check_unsafety::UnsafetyVisitor>::visit_inner_body
  26:     0x7e7ea9757caf - <rustc_mir_build[af875f067a42dab4]::check_unsafety::UnsafetyVisitor as rustc_middle[7d28cec7e9fc3932]::thir::visit::Visitor>::visit_expr
  27:     0x7e7ea975776c - <rustc_mir_build[af875f067a42dab4]::check_unsafety::UnsafetyVisitor as rustc_middle[7d28cec7e9fc3932]::thir::visit::Visitor>::visit_block
  28:     0x7e7ea9757caf - <rustc_mir_build[af875f067a42dab4]::check_unsafety::UnsafetyVisitor as rustc_middle[7d28cec7e9fc3932]::thir::visit::Visitor>::visit_expr
  29:     0x7e7ea9493e03 - rustc_mir_build[af875f067a42dab4]::check_unsafety::check_unsafety
  30:     0x7e7ea94938f3 - rustc_query_impl[5378ca482bd296bb]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5378ca482bd296bb]::query_impl::check_unsafety::dynamic_query::{closure#2}::{closure#0}, rustc_middle[7d28cec7e9fc3932]::query::erase::Erased<[u8; 0usize]>>
  31:     0x7e7ea9493108 - rustc_query_system[a2be9dcacbe77f66]::query::plumbing::try_execute_query::<rustc_query_impl[5378ca482bd296bb]::DynamicConfig<rustc_data_structures[5ba4159916cb5ba7]::vec_cache::VecCache<rustc_span[a5c1eac4cdc714d]::def_id::LocalDefId, rustc_middle[7d28cec7e9fc3932]::query::erase::Erased<[u8; 0usize]>, rustc_query_system[a2be9dcacbe77f66]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[5378ca482bd296bb]::plumbing::QueryCtxt, false>
  32:     0x7e7ea9492dfe - rustc_query_impl[5378ca482bd296bb]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace
  33:     0x7e7ea948fe9b - rustc_interface[5c972e661207e7b9]::passes::run_required_analyses
  34:     0x7e7ea9ac14de - rustc_interface[5c972e661207e7b9]::passes::analysis
  35:     0x7e7ea9ac14b3 - rustc_query_impl[5378ca482bd296bb]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5378ca482bd296bb]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[7d28cec7e9fc3932]::query::erase::Erased<[u8; 0usize]>>
  36:     0x7e7ea9d1b43a - rustc_query_system[a2be9dcacbe77f66]::query::plumbing::try_execute_query::<rustc_query_impl[5378ca482bd296bb]::DynamicConfig<rustc_query_system[a2be9dcacbe77f66]::query::caches::SingleCache<rustc_middle[7d28cec7e9fc3932]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[5378ca482bd296bb]::plumbing::QueryCtxt, false>
  37:     0x7e7ea9d1b138 - rustc_query_impl[5378ca482bd296bb]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  38:     0x7e7ea9ec607c - rustc_interface[5c972e661207e7b9]::passes::create_and_enter_global_ctxt::<core[56a6f027e174954b]::option::Option<rustc_interface[5c972e661207e7b9]::queries::Linker>, rustc_driver_impl[611c1addf2cce3f]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
  39:     0x7e7ea9d0344f - rustc_interface[5c972e661207e7b9]::interface::run_compiler::<(), rustc_driver_impl[611c1addf2cce3f]::run_compiler::{closure#0}>::{closure#1}
  40:     0x7e7ea9b9f508 - std[7b5691ee7d4d07df]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[5c972e661207e7b9]::util::run_in_thread_with_globals<rustc_interface[5c972e661207e7b9]::util::run_in_thread_pool_with_globals<rustc_interface[5c972e661207e7b9]::interface::run_compiler<(), rustc_driver_impl[611c1addf2cce3f]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  41:     0x7e7ea9b9fdf4 - <<std[7b5691ee7d4d07df]::thread::Builder>::spawn_unchecked_<rustc_interface[5c972e661207e7b9]::util::run_in_thread_with_globals<rustc_interface[5c972e661207e7b9]::util::run_in_thread_pool_with_globals<rustc_interface[5c972e661207e7b9]::interface::run_compiler<(), rustc_driver_impl[611c1addf2cce3f]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[56a6f027e174954b]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  42:     0x7e7ea9ba11f7 - std::sys::pal::unix::thread::Thread::new::thread_start::h1fb8fc19ce5c8a2a
  43:     0x7e7eab30ea94 - <unknown>
  44:     0x7e7eab39ba34 - clone
  45:                0x0 - <unknown>

@rustbot label regression-from-stable-to-nightly

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions