xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-semicolon.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-suspicious-semicolon %t
2*89a1d03eSRichard 
3*89a1d03eSRichard int x = 5;
4*89a1d03eSRichard 
5*89a1d03eSRichard void nop();
6*89a1d03eSRichard 
correct1()7*89a1d03eSRichard void correct1()
8*89a1d03eSRichard {
9*89a1d03eSRichard 	if(x < 5) nop();
10*89a1d03eSRichard }
11*89a1d03eSRichard 
correct2()12*89a1d03eSRichard void correct2()
13*89a1d03eSRichard {
14*89a1d03eSRichard 	if(x == 5)
15*89a1d03eSRichard 		nop();
16*89a1d03eSRichard }
17*89a1d03eSRichard 
correct3()18*89a1d03eSRichard void correct3()
19*89a1d03eSRichard {
20*89a1d03eSRichard 	if(x > 5)
21*89a1d03eSRichard 	{
22*89a1d03eSRichard 		nop();
23*89a1d03eSRichard 	}
24*89a1d03eSRichard }
25*89a1d03eSRichard 
fail1()26*89a1d03eSRichard void fail1()
27*89a1d03eSRichard {
28*89a1d03eSRichard   if(x > 5); nop();
29*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: potentially unintended semicolon [bugprone-suspicious-semicolon]
30*89a1d03eSRichard   // CHECK-FIXES: if(x > 5) nop();
31*89a1d03eSRichard }
32*89a1d03eSRichard 
fail2()33*89a1d03eSRichard void fail2()
34*89a1d03eSRichard {
35*89a1d03eSRichard 	if(x == 5);
36*89a1d03eSRichard 		nop();
37*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-2]]:12: warning: potentially unintended semicolon [bugprone-suspicious-semicolon]
38*89a1d03eSRichard   // CHECK-FIXES: if(x == 5){{$}}
39*89a1d03eSRichard }
40*89a1d03eSRichard 
fail3()41*89a1d03eSRichard void fail3()
42*89a1d03eSRichard {
43*89a1d03eSRichard 	if(x < 5);
44*89a1d03eSRichard 	{
45*89a1d03eSRichard 		nop();
46*89a1d03eSRichard 	}
47*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-4]]:11: warning: potentially unintended semicolon
48*89a1d03eSRichard   // CHECK-FIXES: if(x < 5){{$}}
49*89a1d03eSRichard }
50*89a1d03eSRichard 
correct4()51*89a1d03eSRichard void correct4()
52*89a1d03eSRichard {
53*89a1d03eSRichard   while(x % 5 == 1);
54*89a1d03eSRichard   nop();
55*89a1d03eSRichard }
56*89a1d03eSRichard 
correct5()57*89a1d03eSRichard void correct5()
58*89a1d03eSRichard {
59*89a1d03eSRichard 	for(int i = 0; i < x; ++i)
60*89a1d03eSRichard 		;
61*89a1d03eSRichard }
62*89a1d03eSRichard 
fail4()63*89a1d03eSRichard void fail4()
64*89a1d03eSRichard {
65*89a1d03eSRichard 	for(int i = 0; i < x; ++i);
66*89a1d03eSRichard 		nop();
67*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: potentially unintended semicolon
68*89a1d03eSRichard   // CHECK-FIXES: for(int i = 0; i < x; ++i){{$}}
69*89a1d03eSRichard }
70*89a1d03eSRichard 
fail5()71*89a1d03eSRichard void fail5()
72*89a1d03eSRichard {
73*89a1d03eSRichard 	if(x % 5 == 1);
74*89a1d03eSRichard 	  nop();
75*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-2]]:16: warning: potentially unintended semicolon
76*89a1d03eSRichard   // CHECK-FIXES: if(x % 5 == 1){{$}}
77*89a1d03eSRichard }
78*89a1d03eSRichard 
fail6()79*89a1d03eSRichard void fail6() {
80*89a1d03eSRichard   int a = 0;
81*89a1d03eSRichard   if (a != 0) {
82*89a1d03eSRichard   } else if (a != 1);
83*89a1d03eSRichard     a = 2;
84*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-2]]:21: warning: potentially unintended semicolon
85*89a1d03eSRichard   // CHECK-FIXES: } else if (a != 1){{$}}
86*89a1d03eSRichard }
87*89a1d03eSRichard 
fail7()88*89a1d03eSRichard void fail7() {
89*89a1d03eSRichard   if (true)
90*89a1d03eSRichard     ;
91*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: potentially unintended semicolon
92*89a1d03eSRichard }
93*89a1d03eSRichard 
correct6()94*89a1d03eSRichard void correct6()
95*89a1d03eSRichard {
96*89a1d03eSRichard 	do; while(false);
97*89a1d03eSRichard }
98*89a1d03eSRichard 
correct7()99*89a1d03eSRichard int correct7()
100*89a1d03eSRichard {
101*89a1d03eSRichard   int t_num = 0;
102*89a1d03eSRichard   char c = 'b';
103*89a1d03eSRichard   char *s = "a";
104*89a1d03eSRichard   if (s == "(" || s != "'" || c == '"') {
105*89a1d03eSRichard     t_num += 3;
106*89a1d03eSRichard     return (c == ')' && c == '\'');
107*89a1d03eSRichard   }
108*89a1d03eSRichard 
109*89a1d03eSRichard   return 0;
110*89a1d03eSRichard }
111*89a1d03eSRichard 
correct8()112*89a1d03eSRichard void correct8() {
113*89a1d03eSRichard   if (true)
114*89a1d03eSRichard     ;
115*89a1d03eSRichard   else {
116*89a1d03eSRichard   }
117*89a1d03eSRichard }
118