xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/terminating-continue.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-terminating-continue %t
2*89a1d03eSRichard 
f()3*89a1d03eSRichard void f() {
4*89a1d03eSRichard   do {
5*89a1d03eSRichard     continue;
6*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'continue' in loop with false condition is equivalent to 'break' [bugprone-terminating-continue]
7*89a1d03eSRichard     // CHECK-FIXES: break;
8*89a1d03eSRichard   } while(false);
9*89a1d03eSRichard 
10*89a1d03eSRichard   do {
11*89a1d03eSRichard     continue;
12*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'continue' in loop with false condition is equivalent to 'break' [bugprone-terminating-continue]
13*89a1d03eSRichard     // CHECK-FIXES: break;
14*89a1d03eSRichard   } while(0);
15*89a1d03eSRichard 
16*89a1d03eSRichard   do {
17*89a1d03eSRichard     continue;
18*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'continue' in loop with false condition is equivalent to 'break' [bugprone-terminating-continue]
19*89a1d03eSRichard     // CHECK-FIXES: break;
20*89a1d03eSRichard   } while(nullptr);
21*89a1d03eSRichard 
22*89a1d03eSRichard   do {
23*89a1d03eSRichard     continue;
24*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'continue' in loop with false condition is equivalent to 'break' [bugprone-terminating-continue]
25*89a1d03eSRichard     // CHECK-FIXES: break;
26*89a1d03eSRichard   } while(__null);
27*89a1d03eSRichard 
28*89a1d03eSRichard 
29*89a1d03eSRichard   do {
30*89a1d03eSRichard     int x = 1;
31*89a1d03eSRichard     if (x > 0) continue;
32*89a1d03eSRichard     // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'continue' in loop with false condition is equivalent to 'break' [bugprone-terminating-continue]
33*89a1d03eSRichard     // CHECK-FIXES: if (x > 0) break;
34*89a1d03eSRichard   } while (false);
35*89a1d03eSRichard 
36*89a1d03eSRichard   switch (2) {
37*89a1d03eSRichard   case 2:
38*89a1d03eSRichard     do {
39*89a1d03eSRichard       continue; // LoopInSwitch
40*89a1d03eSRichard       // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: 'continue' in loop with false condition is equivalent to 'break' [bugprone-terminating-continue]
41*89a1d03eSRichard       // CHECK-FIXES: break; // LoopInSwitch
42*89a1d03eSRichard     } while (0);
43*89a1d03eSRichard   }
44*89a1d03eSRichard }
45*89a1d03eSRichard 
g()46*89a1d03eSRichard void g() {
47*89a1d03eSRichard   do {
48*89a1d03eSRichard     do {
49*89a1d03eSRichard       continue;
50*89a1d03eSRichard       int x = 1;
51*89a1d03eSRichard     } while (1 == 1);
52*89a1d03eSRichard   } while (false);
53*89a1d03eSRichard 
54*89a1d03eSRichard   do {
55*89a1d03eSRichard     for (int i = 0; i < 1; ++i) {
56*89a1d03eSRichard       continue;
57*89a1d03eSRichard       int x = 1;
58*89a1d03eSRichard     }
59*89a1d03eSRichard   } while (false);
60*89a1d03eSRichard 
61*89a1d03eSRichard   do {
62*89a1d03eSRichard     while (true) {
63*89a1d03eSRichard       continue;
64*89a1d03eSRichard       int x = 1;
65*89a1d03eSRichard     }
66*89a1d03eSRichard   } while (false);
67*89a1d03eSRichard 
68*89a1d03eSRichard   int v[] = {1,2,3,34};
69*89a1d03eSRichard   do {
70*89a1d03eSRichard     for (int n : v) {
71*89a1d03eSRichard       if (n>2) continue;
72*89a1d03eSRichard     }
73*89a1d03eSRichard   } while (false);
74*89a1d03eSRichard 
75*89a1d03eSRichard   do {
76*89a1d03eSRichard     switch (2) {
77*89a1d03eSRichard     case 1:
78*89a1d03eSRichard     case 2:
79*89a1d03eSRichard       continue;
80*89a1d03eSRichard     }
81*89a1d03eSRichard   } while (false);
82*89a1d03eSRichard }
83