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