//! When a closure syntactically captures a place, but doesn't actually capture //! it, make sure MIR building doesn't ICE when handling that place. //! //! Under the Rust 2021 disjoint capture rules, this sort of non-capture can //! occur when a place is only inspected by infallible non-binding patterns. // FIXME(#135985): On its own, this test should probably just be check-pass. // But there are few/no other tests that use non-binding array patterns and // invoke the later parts of the compiler, so building/running has some value. //@ run-pass //@ edition:2021 #[expect(dead_code)] struct Props { field_1: u32, field_2: u32, } fn main() { // Test 1 let props_2 = Props { field_1: 1, field_2: 1 }; let _ = || { let _: Props = props_2; }; // Test 2 let mut arr = [1, 3, 4, 5]; let mref = &mut arr; // These array patterns don't need to inspect the array, so the array // isn't captured. let _c = || match arr { [_, _, _, _] => println!("C"), }; let _d = || match arr { [_, .., _] => println!("D"), }; let _e = || match arr { [_, ..] => println!("E"), }; println!("{:#?}", mref); }