Skip to content

Panicked at compiler/rustc_mir_build/src/builder/matches/match_pair.rs:256:37: refutable patterns must have captured a place #162801

Closed as duplicate

Description

@YuanchengJiang

The following code:

#![feature(type_alias_impl_trait)]

fn enum_upvar() {
    type T = impl Copy;
    let foo: T = Some((1u32, 2u32));
    let x = move || match foo {
        None => (),
        Some((a, b)) => (),
    };
}

fn main() {}

Resulted in this output:

thread 'rustc' (3295760) panicked at compiler/rustc_mir_build/src/builder/matches/match_pair.rs:256:37:
refutable patterns must have captured a place
stack backtrace:
   0: __rustc::rust_begin_unwind
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/std/src/panicking.rs:679:5
   1: core::panicking::panic_fmt
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/panicking.rs:80:14
   2: core::panicking::panic_display::<&str>
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/panicking.rs:259:5
   3: core::option::expect_failed
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/option.rs:2257:5
   4: <core::option::Option<rustc_middle::mir::syntax::Place>>::expect
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/option.rs:969:21
   5: <rustc_mir_build::builder::matches::match_pair::InterPat>::lower_thir_pat::{closure#1}
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/matches/match_pair.rs:256:37
   6: <rustc_mir_build::builder::matches::match_pair::InterPat>::lower_thir_pat
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/matches/match_pair.rs:403:54
   7: <rustc_mir_build::builder::matches::FlatPat>::new
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/matches/match_pair.rs:80:25
   8: <rustc_mir_build::builder::matches::Candidate>::new
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/matches/mod.rs:1076:13
   9: <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/matches/mod.rs:1563:17
  10: core::iter::adapters::map::map_fold::<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard), rustc_mir_build::builder::matches::Candidate, (), <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}, core::iter::traits::iterator::Iterator::for_each::call<rustc_mir_build::builder::matches::Candidate, <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate>>::extend_trusted<core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>::{closure#0}>::{closure#0}>::{closure#0}
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/iter/adapters/map.rs:88:28
  11: <alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)> as core::iter::traits::iterator::Iterator>::fold::<(), core::iter::adapters::map::map_fold<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard), rustc_mir_build::builder::matches::Candidate, (), <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}, core::iter::traits::iterator::Iterator::for_each::call<rustc_mir_build::builder::matches::Candidate, <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate>>::extend_trusted<core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>::{closure#0}>::{closure#0}>::{closure#0}>
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/alloc/src/vec/into_iter.rs:367:25
  12: <core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}> as core::iter::traits::iterator::Iterator>::fold::<(), core::iter::traits::iterator::Iterator::for_each::call<rustc_mir_build::builder::matches::Candidate, <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate>>::extend_trusted<core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>::{closure#0}>::{closure#0}>
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/iter/adapters/map.rs:128:19
  13: <core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}> as core::iter::traits::iterator::Iterator>::for_each::<<alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate>>::extend_trusted<core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>::{closure#0}>
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/iter/traits/iterator.rs:887:14
  14: <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate>>::extend_trusted::<core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/alloc/src/vec/mod.rs:4132:26
  15: <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate> as alloc::vec::spec_extend::SpecExtend<rustc_mir_build::builder::matches::Candidate, core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>>::spec_extend
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/alloc/src/vec/spec_extend.rs:27:14
  16: <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<rustc_mir_build::builder::matches::Candidate, core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>>::from_iter
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/alloc/src/vec/spec_from_iter_nested.rs:60:16
  17: <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate> as alloc::vec::spec_from_iter::SpecFromIter<rustc_mir_build::builder::matches::Candidate, core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>>::from_iter
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/alloc/src/vec/in_place_collect.rs:245:9
  18: <alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate> as core::iter::traits::collect::FromIterator<rustc_mir_build::builder::matches::Candidate>>::from_iter::<core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}>>
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/alloc/src/vec/mod.rs:3996:9
  19: <core::iter::adapters::map::Map<alloc::vec::into_iter::IntoIter<(&rustc_middle::thir::Pat, rustc_mir_build::builder::matches::HasMatchGuard)>, <rustc_mir_build::builder::Builder>::lower_match_tree::{closure#0}> as core::iter::traits::iterator::Iterator>::collect::<alloc::vec::Vec<rustc_mir_build::builder::matches::Candidate>>
             at /rustc/cbae9b4cae2b108f6a3d18cfe6075714bb739463/library/core/src/iter/traits/iterator.rs:2086:9
  20: <rustc_mir_build::builder::Builder>::lower_match_tree
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/matches/mod.rs:1565:14
  21: <rustc_mir_build::builder::Builder>::match_expr
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/matches/mod.rs:356:31
  22: <rustc_mir_build::builder::Builder>::expr_into_dest
             at /home/fuzz/WorkSpace/fusion-fuzz/projects/rust/rust-src/compiler/rustc_mir_build/src/builder/expr/into.rs:59:22

To reproduce: rustc --edition=2021 -Znext-solver=no ./min.rs

This bug was found by fusion-fuzz

Activity

  1. added
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Sep 15, 2026
  2. added
    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.
    fixed-by-next-solverFixed by the next-generation trait solver, `-Znext-solver`.
    on Sep 15, 2026
  3. matthiaskrgr commented on Sep 15, 2026

    @matthiaskrgr
    Member

    duplicate of #119786 ?

  4. removed
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Sep 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.F-type_alias_impl_trait`#[feature(type_alias_impl_trait)]`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.fixed-by-next-solverFixed by the next-generation trait solver, `-Znext-solver`.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions