1 // The output should warn when a loop label is not used. However, it
2 // should also deal with the edge cases where a label is shadowed,
7 #![warn(unused_labels)]
10 'unused_while_label: while 0 == 0 {
11 //~^ WARN unused label
15 'unused_while_let_label: while let Some(_) = opt {
16 //~^ WARN unused label
19 'unused_for_label: for _ in 0..10 {
20 //~^ WARN unused label
23 'used_loop_label: loop {
24 break 'used_loop_label;
27 'used_loop_label_outer_1: for _ in 0..10 {
28 'used_loop_label_inner_1: for _ in 0..10 {
29 break 'used_loop_label_inner_1;
31 break 'used_loop_label_outer_1;
34 'used_loop_label_outer_2: for _ in 0..10 {
35 'unused_loop_label_inner_2: for _ in 0..10 {
36 //~^ WARN unused label
37 break 'used_loop_label_outer_2;
41 'unused_loop_label_outer_3: for _ in 0..10 {
42 //~^ WARN unused label
43 'used_loop_label_inner_3: for _ in 0..10 {
44 break 'used_loop_label_inner_3;
48 // You should be able to break the same label many times
57 // Test breaking many times with the same inner label doesn't break the
58 // warning on the outer label
59 'many_used_shadowed: for _ in 0..10 {
60 //~^ WARN unused label
61 'many_used_shadowed: for _ in 0..10 {
62 //~^ WARN label name `'many_used_shadowed` shadows a label name that is already in scope
64 break 'many_used_shadowed;
66 break 'many_used_shadowed;
71 'unused_loop_label: loop {
72 //~^ WARN unused label
76 // Make sure unused block labels give warnings...
77 'unused_block_label: {
78 //~^ WARN unused label
81 // ...and that used ones don't:
83 break 'used_block_label;