| // Test that a `#[const_continue]` that breaks to a normal labeled block (that |
| // is not part of a `#[loop_match]`) produces an error. |
| |
| #![allow(incomplete_features)] |
| #![feature(loop_match)] |
| #![crate_type = "lib"] |
| |
| fn const_continue_to_block() -> u8 { |
| let state = 0; |
| #[loop_match] |
| loop { |
| state = 'blk: { |
| match state { |
| 0 => { |
| #[const_continue] |
| break 'blk 1; |
| } |
| _ => 'b: { |
| #[const_continue] |
| break 'b 2; |
| //~^ ERROR `#[const_continue]` must break to a labeled block that participates in a `#[loop_match]` |
| } |
| } |
| } |
| } |
| } |
| |
| fn const_continue_to_shadowed_block() -> u8 { |
| let state = 0; |
| #[loop_match] |
| loop { |
| state = 'blk: { |
| match state { |
| 0 => { |
| #[const_continue] |
| break 'blk 1; |
| } |
| _ => 'blk: { |
| //~^ WARN label name `'blk` shadows a label name that is already in scope |
| #[const_continue] |
| break 'blk 2; |
| //~^ ERROR `#[const_continue]` must break to a labeled block that participates in a `#[loop_match]` |
| } |
| } |
| } |
| } |
| } |