// skip-filecheck #![allow(incomplete_features)] #![feature(loop_match)] #![crate_type = "lib"] // Test that a #[loop_match] without an explicit break from the loop generates valid MIR. enum State { A, B, C, } // EMIT_MIR loop_match_diverges.simple.built.after.mir fn simple(mut state: State) -> State { #[loop_match] 'a: loop { state = 'blk: { match state { State::A => { #[const_continue] break 'blk State::B; } State::B => { if true { #[const_continue] break 'blk State::C; } else { #[const_continue] break 'blk State::A; } } State::C => break 'a, } }; } state } // EMIT_MIR loop_match_diverges.break_to_block_unit.built.after.mir #[unsafe(no_mangle)] fn break_to_block_unit() -> u8 { let mut state = 0; #[loop_match] loop { state = 'blk: { match state { _ => 'b: { break 'b 2; } } } } } // EMIT_MIR loop_match_diverges.infinite_a.built.after.mir #[unsafe(no_mangle)] fn infinite_a(mut state: u8) { #[loop_match] loop { state = 'blk: { match state { a => a, } } } }