]> git.lizzy.rs Git - rust.git/blob - tests/ui/never_loop.rs
Merge pull request #2984 from flip1995/single_char_pattern
[rust.git] / tests / ui / never_loop.rs
1
2
3 #![allow(single_match, unused_assignments, unused_variables, while_immutable_condition)]
4
5 fn test1() {
6     let mut x = 0;
7     loop { // never_loop
8         x += 1;
9         if x == 1 {
10             return
11         }
12         break;
13     }
14 }
15
16 fn test2() {
17     let mut x = 0;
18     loop {
19         x += 1;
20         if x == 1 {
21             break
22         }
23     }
24 }
25
26 fn test3() {
27     let mut x = 0;
28     loop { // never loops
29         x += 1;
30         break
31     }
32 }
33
34 fn test4() {
35     let mut x = 1;
36     loop {
37         x += 1;
38         match x {
39             5 => return,
40             _ => (),
41         }
42     }
43 }
44
45 fn test5() {
46     let i = 0;
47         loop { // never loops
48         while i == 0 { // never loops
49             break
50         }
51         return
52         }
53 }
54
55 fn test6() {
56     let mut x = 0;
57     'outer: loop {
58         x += 1;
59                 loop { // never loops
60             if x == 5 { break }
61                         continue 'outer
62                 }
63                 return
64         }
65 }
66
67 fn test7() {
68     let mut x = 0;
69     loop {
70         x += 1;
71         match x {
72             1 => continue,
73             _ => (),
74         }
75         return
76     }
77 }
78
79 fn test8() {
80     let mut x = 0;
81     loop {
82         x += 1;
83         match x {
84             5 => return,
85             _ => continue,
86         }
87     }
88 }
89
90 fn test9() {
91     let x = Some(1);
92     while let Some(y) = x { // never loops
93         return
94     }
95 }
96
97 fn test10() {
98     for x in 0..10 { // never loops
99         match x {
100             1 => break,
101             _ => return,
102         }
103     }
104 }
105
106 fn test11<F: FnMut() -> i32>(mut f: F) {
107     loop {
108         return match f() {
109             1 => continue,
110             _ => (),
111         }
112     }
113 }
114
115 pub fn test12(a: bool, b: bool) {
116     'label: loop {
117         loop {
118             if a {
119                 continue 'label;
120             }
121             if b {
122                 break;
123             }
124         }
125         break;
126     }
127 }
128
129 pub fn test13() {
130     let mut a = true;
131     loop { // infinite loop
132         while a {
133             if true {
134                 a = false;
135                 continue;
136             }
137             return;
138         }
139     }
140 }
141
142 pub fn test14() {
143     let mut a = true;
144     'outer: while a { // never loops
145         while a {
146             if a {
147                 a = false;
148                 continue
149             }
150         }
151         break 'outer;
152     }
153 }
154
155 // Issue #1991: the outter loop should not warn.
156 pub fn test15() {
157     'label: loop {
158         while false {
159             break 'label;
160         }
161     }
162 }
163
164 fn main() {
165     test1();
166     test2();
167     test3();
168     test4();
169     test5();
170     test6();
171     test7();
172     test8();
173     test9();
174     test10();
175     test11(|| 0);
176     test12(true, false);
177     test13();
178     test14();
179 }
180