]> git.lizzy.rs Git - rust.git/blob - src/test/ui/lint/unused_labels.rs
Diagnose shadowing on AST.
[rust.git] / src / test / ui / lint / unused_labels.rs
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,
3 // within nested loops
4
5 // check-pass
6
7 #![feature(label_break_value)]
8 #![warn(unused_labels)]
9
10 fn main() {
11     'unused_while_label: while 0 == 0 {
12         //~^ WARN unused label
13     }
14
15     let opt = Some(0);
16     'unused_while_let_label: while let Some(_) = opt {
17         //~^ WARN unused label
18     }
19
20     'unused_for_label: for _ in 0..10 {
21         //~^ WARN unused label
22     }
23
24     'used_loop_label: loop {
25         break 'used_loop_label;
26     }
27
28     'used_loop_label_outer_1: for _ in 0..10 {
29         'used_loop_label_inner_1: for _ in 0..10 {
30             break 'used_loop_label_inner_1;
31         }
32         break 'used_loop_label_outer_1;
33     }
34
35     'used_loop_label_outer_2: for _ in 0..10 {
36         'unused_loop_label_inner_2: for _ in 0..10 {
37             //~^ WARN unused label
38             break 'used_loop_label_outer_2;
39         }
40     }
41
42     'unused_loop_label_outer_3: for _ in 0..10 {
43         //~^ WARN unused label
44         'used_loop_label_inner_3: for _ in 0..10 {
45             break 'used_loop_label_inner_3;
46         }
47     }
48
49     // You should be able to break the same label many times
50     'many_used: loop {
51         if true {
52             break 'many_used;
53         } else {
54             break 'many_used;
55         }
56     }
57
58     // Test breaking many times with the same inner label doesn't break the
59     // warning on the outer label
60     'many_used_shadowed: for _ in 0..10 {
61         //~^ WARN unused label
62         'many_used_shadowed: for _ in 0..10 {
63             //~^ WARN label name `'many_used_shadowed` shadows a label name that is already in scope
64             if 1 % 2 == 0 {
65                 break 'many_used_shadowed;
66             } else {
67                 break 'many_used_shadowed;
68             }
69         }
70     }
71
72     'unused_loop_label: loop {
73         //~^ WARN unused label
74         break;
75     }
76
77     // Make sure unused block labels give warnings...
78     'unused_block_label: {
79         //~^ WARN unused label
80     }
81
82     // ...and that used ones don't:
83     'used_block_label: {
84         break 'used_block_label;
85     }
86 }