| // Test that a basic correct example of `#[loop_match]` with `#[const_continue]` | |
| // works correctly. | |
| //@ run-pass | |
| #![allow(incomplete_features)] | |
| #![feature(loop_match)] | |
| enum State { | |
| A, | |
| B, | |
| C, | |
| } | |
| fn main() { | |
| let mut state = State::A; | |
| #[loop_match] | |
| 'a: loop { | |
| state = 'blk: { | |
| match state { | |
| State::A => { | |
| #[const_continue] | |
| break 'blk State::B; | |
| } | |
| State::B => { | |
| // Without special logic, the compiler believes this is a | |
| // reassignment to an immutable variable because of the | |
| // `loop`. So this tests that local variables work. | |
| let _a = 0; | |
| if true { | |
| #[const_continue] | |
| break 'blk State::C; | |
| } else { | |
| #[const_continue] | |
| break 'blk State::A; | |
| } | |
| } | |
| State::C => break 'a, | |
| } | |
| }; | |
| } | |
| assert!(matches!(state, State::C)) | |
| } |