xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression-2.cpp (revision 8e1cb96db84a70b2c803c28a359c8bb71395f35e)
1*8e1cb96dSvabridgers // RUN: %check_clang_tidy %s misc-redundant-expression -check-suffix=IDENTEXPR %t
2*8e1cb96dSvabridgers 
3*8e1cb96dSvabridgers /* Only one expected warning per function allowed at the very end. */
4*8e1cb96dSvabridgers 
5*8e1cb96dSvabridgers int func(void)
6*8e1cb96dSvabridgers {
7*8e1cb96dSvabridgers   return 0;
8*8e1cb96dSvabridgers }
9*8e1cb96dSvabridgers 
10*8e1cb96dSvabridgers int func2(void)
11*8e1cb96dSvabridgers {
12*8e1cb96dSvabridgers   return 0;
13*8e1cb96dSvabridgers }
14*8e1cb96dSvabridgers 
15*8e1cb96dSvabridgers int funcParam(int a)
16*8e1cb96dSvabridgers {
17*8e1cb96dSvabridgers   return 0;
18*8e1cb96dSvabridgers }
19*8e1cb96dSvabridgers 
20*8e1cb96dSvabridgers /* '!=' operator*/
21*8e1cb96dSvabridgers 
22*8e1cb96dSvabridgers /* '!=' with float */
23*8e1cb96dSvabridgers int checkNotEqualFloatLiteralCompare1(void) {
24*8e1cb96dSvabridgers   return (5.14F != 5.14F); // no warning
25*8e1cb96dSvabridgers }
26*8e1cb96dSvabridgers 
27*8e1cb96dSvabridgers int checkNotEqualFloatLiteralCompare2(void) {
28*8e1cb96dSvabridgers   return (6.14F != 7.14F); // no warning
29*8e1cb96dSvabridgers }
30*8e1cb96dSvabridgers 
31*8e1cb96dSvabridgers int checkNotEqualFloatDeclCompare1(void) {
32*8e1cb96dSvabridgers   float f = 7.1F;
33*8e1cb96dSvabridgers   float g = 7.1F;
34*8e1cb96dSvabridgers   return (f != g); // no warning
35*8e1cb96dSvabridgers }
36*8e1cb96dSvabridgers 
37*8e1cb96dSvabridgers int checkNotEqualFloatDeclCompare12(void) {
38*8e1cb96dSvabridgers   float f = 7.1F;
39*8e1cb96dSvabridgers   return (f != f); // no warning
40*8e1cb96dSvabridgers }
41*8e1cb96dSvabridgers 
42*8e1cb96dSvabridgers int checkNotEqualFloatDeclCompare3(void) {
43*8e1cb96dSvabridgers   float f = 7.1F;
44*8e1cb96dSvabridgers   return (f != 7.1F); // no warning
45*8e1cb96dSvabridgers }
46*8e1cb96dSvabridgers 
47*8e1cb96dSvabridgers int checkNotEqualFloatDeclCompare4(void) {
48*8e1cb96dSvabridgers   float f = 7.1F;
49*8e1cb96dSvabridgers   return (7.1F != f); // no warning
50*8e1cb96dSvabridgers }
51*8e1cb96dSvabridgers 
52*8e1cb96dSvabridgers int checkNotEqualFloatDeclCompare5(void) {
53*8e1cb96dSvabridgers   float f = 7.1F;
54*8e1cb96dSvabridgers   int t = 7;
55*8e1cb96dSvabridgers   return (t != f); // no warning
56*8e1cb96dSvabridgers }
57*8e1cb96dSvabridgers 
58*8e1cb96dSvabridgers int checkNotEqualFloatDeclCompare6(void) {
59*8e1cb96dSvabridgers   float f = 7.1F;
60*8e1cb96dSvabridgers   int t = 7;
61*8e1cb96dSvabridgers   return (f != t); // no warning
62*8e1cb96dSvabridgers }
63*8e1cb96dSvabridgers 
64*8e1cb96dSvabridgers 
65*8e1cb96dSvabridgers 
66*8e1cb96dSvabridgers int checkNotEqualCastFloatDeclCompare11(void) {
67*8e1cb96dSvabridgers   float f = 7.1F;
68*8e1cb96dSvabridgers   return ((int)f != (int)f);
69*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
70*8e1cb96dSvabridgers }
71*8e1cb96dSvabridgers int checkNotEqualCastFloatDeclCompare12(void) {
72*8e1cb96dSvabridgers   float f = 7.1F;
73*8e1cb96dSvabridgers   return ((char)f != (int)f); // no warning
74*8e1cb96dSvabridgers }
75*8e1cb96dSvabridgers int checkNotEqualBinaryOpFloatCompare1(void) {
76*8e1cb96dSvabridgers   int res;
77*8e1cb96dSvabridgers   float f= 3.14F;
78*8e1cb96dSvabridgers   res = (f + 3.14F != f + 3.14F);  // no warning
79*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:20: warning: both sides of operator are equivalent [misc-redundant-expression]
80*8e1cb96dSvabridgers   return (0);
81*8e1cb96dSvabridgers }
82*8e1cb96dSvabridgers int checkNotEqualBinaryOpFloatCompare2(void) {
83*8e1cb96dSvabridgers   float f = 7.1F;
84*8e1cb96dSvabridgers   float g = 7.1F;
85*8e1cb96dSvabridgers   return (f + 3.14F != g + 3.14F); // no warning
86*8e1cb96dSvabridgers }
87*8e1cb96dSvabridgers int checkNotEqualBinaryOpFloatCompare3(void) {
88*8e1cb96dSvabridgers   int res;
89*8e1cb96dSvabridgers   float f= 3.14F;
90*8e1cb96dSvabridgers   res = ((int)f + 3.14F != (int)f + 3.14F);  // no warning
91*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:25: warning: both sides of operator are equivalent [misc-redundant-expression]
92*8e1cb96dSvabridgers   return (0);
93*8e1cb96dSvabridgers }
94*8e1cb96dSvabridgers int checkNotEqualBinaryOpFloatCompare4(void) {
95*8e1cb96dSvabridgers   int res;
96*8e1cb96dSvabridgers   float f= 3.14F;
97*8e1cb96dSvabridgers   res = ((int)f + 3.14F != (char)f + 3.14F);  // no warning
98*8e1cb96dSvabridgers   return (0);
99*8e1cb96dSvabridgers }
100*8e1cb96dSvabridgers 
101*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpFloatCompare1(void) {
102*8e1cb96dSvabridgers   int res;
103*8e1cb96dSvabridgers   int t= 1;
104*8e1cb96dSvabridgers   int u= 2;
105*8e1cb96dSvabridgers   float f= 3.14F;
106*8e1cb96dSvabridgers   res = (((int)f + (3.14F - u)*t) != ((int)f + (3.14F - u)*t));  // no warning
107*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:35: warning: both sides of operator are equivalent [misc-redundant-expression]
108*8e1cb96dSvabridgers   return (0);
109*8e1cb96dSvabridgers }
110*8e1cb96dSvabridgers 
111*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpFloatCompare2(void) {
112*8e1cb96dSvabridgers   int res;
113*8e1cb96dSvabridgers   int t= 1;
114*8e1cb96dSvabridgers   int u= 2;
115*8e1cb96dSvabridgers   float f= 3.14F;
116*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) != ((int)f + (3.14F - u)*t));  // no warning
117*8e1cb96dSvabridgers   return (0);
118*8e1cb96dSvabridgers }
119*8e1cb96dSvabridgers 
120*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpFloatCompare3(void) {
121*8e1cb96dSvabridgers   int res;
122*8e1cb96dSvabridgers   int t= 1;
123*8e1cb96dSvabridgers   int u= 2;
124*8e1cb96dSvabridgers   float f= 3.14F;
125*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) != ((int)f + (3.14F - u)*(f + t != f + t)));  // no warning
126*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:67: warning: both sides of operator are equivalent [misc-redundant-expression]
127*8e1cb96dSvabridgers   return (0);
128*8e1cb96dSvabridgers }
129*8e1cb96dSvabridgers 
130*8e1cb96dSvabridgers 
131*8e1cb96dSvabridgers /* end '!=' with float*/
132*8e1cb96dSvabridgers 
133*8e1cb96dSvabridgers /* '!=' with int*/
134*8e1cb96dSvabridgers 
135*8e1cb96dSvabridgers int checkNotEqualIntLiteralCompare1(void) {
136*8e1cb96dSvabridgers   return (5 != 5);
137*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
138*8e1cb96dSvabridgers }
139*8e1cb96dSvabridgers 
140*8e1cb96dSvabridgers int checkNotEqualIntLiteralCompare2(void) {
141*8e1cb96dSvabridgers   return (6 != 7); // no warning
142*8e1cb96dSvabridgers }
143*8e1cb96dSvabridgers 
144*8e1cb96dSvabridgers int checkNotEqualIntDeclCompare1(void) {
145*8e1cb96dSvabridgers   int f = 7;
146*8e1cb96dSvabridgers   int g = 7;
147*8e1cb96dSvabridgers   return (f != g); // no warning
148*8e1cb96dSvabridgers }
149*8e1cb96dSvabridgers 
150*8e1cb96dSvabridgers int checkNotEqualIntDeclCompare3(void) {
151*8e1cb96dSvabridgers   int f = 7;
152*8e1cb96dSvabridgers   return (f != 7); // no warning
153*8e1cb96dSvabridgers }
154*8e1cb96dSvabridgers 
155*8e1cb96dSvabridgers int checkNotEqualIntDeclCompare4(void) {
156*8e1cb96dSvabridgers   int f = 7;
157*8e1cb96dSvabridgers   return (7 != f); // no warning
158*8e1cb96dSvabridgers }
159*8e1cb96dSvabridgers 
160*8e1cb96dSvabridgers int checkNotEqualCastIntDeclCompare11(void) {
161*8e1cb96dSvabridgers   int f = 7;
162*8e1cb96dSvabridgers   return ((int)f != (int)f);
163*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
164*8e1cb96dSvabridgers }
165*8e1cb96dSvabridgers int checkNotEqualCastIntDeclCompare12(void) {
166*8e1cb96dSvabridgers   int f = 7;
167*8e1cb96dSvabridgers   return ((char)f != (int)f); // no warning
168*8e1cb96dSvabridgers }
169*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntCompare1(void) {
170*8e1cb96dSvabridgers   int res;
171*8e1cb96dSvabridgers   int t= 1;
172*8e1cb96dSvabridgers   int u= 2;
173*8e1cb96dSvabridgers   int f= 4;
174*8e1cb96dSvabridgers   res = (f + 4 != f + 4);
175*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:16: warning: both sides of operator are equivalent [misc-redundant-expression]
176*8e1cb96dSvabridgers   return (0);
177*8e1cb96dSvabridgers }
178*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntCompare2(void) {
179*8e1cb96dSvabridgers   int f = 7;
180*8e1cb96dSvabridgers   int g = 7;
181*8e1cb96dSvabridgers   return (f + 4 != g + 4); // no warning
182*8e1cb96dSvabridgers }
183*8e1cb96dSvabridgers 
184*8e1cb96dSvabridgers 
185*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntCompare3(void) {
186*8e1cb96dSvabridgers   int res;
187*8e1cb96dSvabridgers   int t= 1;
188*8e1cb96dSvabridgers   int u= 2;
189*8e1cb96dSvabridgers   int f= 4;
190*8e1cb96dSvabridgers   res = ((int)f + 4 != (int)f + 4);
191*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:21: warning: both sides of operator are equivalent [misc-redundant-expression]
192*8e1cb96dSvabridgers   return (0);
193*8e1cb96dSvabridgers }
194*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntCompare4(void) {
195*8e1cb96dSvabridgers   int res;
196*8e1cb96dSvabridgers   int t= 1;
197*8e1cb96dSvabridgers   int u= 2;
198*8e1cb96dSvabridgers   int f= 4;
199*8e1cb96dSvabridgers   res = ((int)f + 4 != (char)f + 4);  // no warning
200*8e1cb96dSvabridgers   return (0);
201*8e1cb96dSvabridgers }
202*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntCompare5(void) {
203*8e1cb96dSvabridgers   int res;
204*8e1cb96dSvabridgers   int t= 1;
205*8e1cb96dSvabridgers   int u= 2;
206*8e1cb96dSvabridgers   res = (u + t != u + t);
207*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:16: warning: both sides of operator are equivalent [misc-redundant-expression]
208*8e1cb96dSvabridgers   return (0);
209*8e1cb96dSvabridgers }
210*8e1cb96dSvabridgers 
211*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpIntCompare1(void) {
212*8e1cb96dSvabridgers   int res;
213*8e1cb96dSvabridgers   int t= 1;
214*8e1cb96dSvabridgers   int u= 2;
215*8e1cb96dSvabridgers   int f= 3;
216*8e1cb96dSvabridgers   res = (((int)f + (3 - u)*t) != ((int)f + (3 - u)*t));
217*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:31: warning: both sides of operator are equivalent [misc-redundant-expression]
218*8e1cb96dSvabridgers   return (0);
219*8e1cb96dSvabridgers }
220*8e1cb96dSvabridgers 
221*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpIntCompare2(void) {
222*8e1cb96dSvabridgers   int res;
223*8e1cb96dSvabridgers   int t= 1;
224*8e1cb96dSvabridgers   int u= 2;
225*8e1cb96dSvabridgers   int f= 3;
226*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) != ((int)f + (3 - u)*t));  // no warning
227*8e1cb96dSvabridgers   return (0);
228*8e1cb96dSvabridgers }
229*8e1cb96dSvabridgers 
230*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpIntCompare3(void) {
231*8e1cb96dSvabridgers   int res;
232*8e1cb96dSvabridgers   int t= 1;
233*8e1cb96dSvabridgers   int u= 2;
234*8e1cb96dSvabridgers   int f= 3;
235*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) != ((int)f + (3 - u)*(t + 1 != t + 1)));
236*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:59: warning: both sides of operator are equivalent [misc-redundant-expression]
237*8e1cb96dSvabridgers   return (0);
238*8e1cb96dSvabridgers }
239*8e1cb96dSvabridgers 
240*8e1cb96dSvabridgers /*   end '!=' int          */
241*8e1cb96dSvabridgers 
242*8e1cb96dSvabridgers /* '!=' with int pointer */
243*8e1cb96dSvabridgers 
244*8e1cb96dSvabridgers int checkNotEqualIntPointerLiteralCompare1(void) {
245*8e1cb96dSvabridgers   int* p = 0;
246*8e1cb96dSvabridgers   return (p != 0); // no warning
247*8e1cb96dSvabridgers }
248*8e1cb96dSvabridgers 
249*8e1cb96dSvabridgers int checkNotEqualIntPointerLiteralCompare2(void) {
250*8e1cb96dSvabridgers   return (6 != 7); // no warning
251*8e1cb96dSvabridgers }
252*8e1cb96dSvabridgers 
253*8e1cb96dSvabridgers int checkNotEqualIntPointerDeclCompare1(void) {
254*8e1cb96dSvabridgers   int k = 3;
255*8e1cb96dSvabridgers   int* f = &k;
256*8e1cb96dSvabridgers   int* g = &k;
257*8e1cb96dSvabridgers   return (f != g); // no warning
258*8e1cb96dSvabridgers }
259*8e1cb96dSvabridgers 
260*8e1cb96dSvabridgers int checkNotEqualCastIntPointerDeclCompare11(void) {
261*8e1cb96dSvabridgers   int k = 7;
262*8e1cb96dSvabridgers   int* f = &k;
263*8e1cb96dSvabridgers   return ((int*)f != (int*)f);
264*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:19: warning: both sides of operator are equivalent [misc-redundant-expression]
265*8e1cb96dSvabridgers }
266*8e1cb96dSvabridgers int checkNotEqualCastIntPointerDeclCompare12(void) {
267*8e1cb96dSvabridgers   int k = 7;
268*8e1cb96dSvabridgers   int* f = &k;
269*8e1cb96dSvabridgers   return ((int*)((char*)f) != (int*)f); // no warning
270*8e1cb96dSvabridgers }
271*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntPointerCompare1(void) {
272*8e1cb96dSvabridgers   int k = 7;
273*8e1cb96dSvabridgers   int res;
274*8e1cb96dSvabridgers   int* f= &k;
275*8e1cb96dSvabridgers   res = (f + 4 != f + 4);
276*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:16: warning: both sides of operator are equivalent [misc-redundant-expression]
277*8e1cb96dSvabridgers   return (0);
278*8e1cb96dSvabridgers }
279*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntPointerCompare2(void) {
280*8e1cb96dSvabridgers   int k = 7;
281*8e1cb96dSvabridgers   int* f = &k;
282*8e1cb96dSvabridgers   int* g = &k;
283*8e1cb96dSvabridgers   return (f + 4 != g + 4); // no warning
284*8e1cb96dSvabridgers }
285*8e1cb96dSvabridgers 
286*8e1cb96dSvabridgers 
287*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntPointerCompare3(void) {
288*8e1cb96dSvabridgers   int k = 7;
289*8e1cb96dSvabridgers   int res;
290*8e1cb96dSvabridgers   int* f= &k;
291*8e1cb96dSvabridgers   res = ((int*)f + 4 != (int*)f + 4);
292*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:22: warning: both sides of operator are equivalent [misc-redundant-expression]
293*8e1cb96dSvabridgers   return (0);
294*8e1cb96dSvabridgers }
295*8e1cb96dSvabridgers int checkNotEqualBinaryOpIntPointerCompare4(void) {
296*8e1cb96dSvabridgers   int k = 7;
297*8e1cb96dSvabridgers   int res;
298*8e1cb96dSvabridgers   int* f= &k;
299*8e1cb96dSvabridgers   res = ((int*)f + 4 != (int*)((char*)f) + 4);  // no warning
300*8e1cb96dSvabridgers   return (0);
301*8e1cb96dSvabridgers }
302*8e1cb96dSvabridgers 
303*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpIntPointerCompare1(void) {
304*8e1cb96dSvabridgers   int res;
305*8e1cb96dSvabridgers   int k = 7;
306*8e1cb96dSvabridgers   int t= 1;
307*8e1cb96dSvabridgers   int* u= &k+2;
308*8e1cb96dSvabridgers   int* f= &k+3;
309*8e1cb96dSvabridgers   res = ((f + (3)*t) != (f + (3)*t));
310*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:22: warning: both sides of operator are equivalent [misc-redundant-expression]
311*8e1cb96dSvabridgers   return (0);
312*8e1cb96dSvabridgers }
313*8e1cb96dSvabridgers 
314*8e1cb96dSvabridgers int checkNotEqualNestedBinaryOpIntPointerCompare2(void) {
315*8e1cb96dSvabridgers   int res;
316*8e1cb96dSvabridgers   int k = 7;
317*8e1cb96dSvabridgers   int t= 1;
318*8e1cb96dSvabridgers   int* u= &k+2;
319*8e1cb96dSvabridgers   int* f= &k+3;
320*8e1cb96dSvabridgers   res = (((3)*t + f) != (f + (3)*t));  // no warning
321*8e1cb96dSvabridgers   return (0);
322*8e1cb96dSvabridgers }
323*8e1cb96dSvabridgers /*   end '!=' int*          */
324*8e1cb96dSvabridgers 
325*8e1cb96dSvabridgers /* '!=' with function*/
326*8e1cb96dSvabridgers 
327*8e1cb96dSvabridgers int checkNotEqualSameFunction() {
328*8e1cb96dSvabridgers   unsigned a = 0;
329*8e1cb96dSvabridgers   unsigned b = 1;
330*8e1cb96dSvabridgers   int res = (a+func() != a+func());  // no warning
331*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:23: warning: both sides of operator are equivalent [misc-redundant-expression]
332*8e1cb96dSvabridgers   return (0);
333*8e1cb96dSvabridgers }
334*8e1cb96dSvabridgers 
335*8e1cb96dSvabridgers int checkNotEqualDifferentFunction() {
336*8e1cb96dSvabridgers   unsigned a = 0;
337*8e1cb96dSvabridgers   unsigned b = 1;
338*8e1cb96dSvabridgers   int res = (a+func() != a+func2());  // no warning
339*8e1cb96dSvabridgers   return (0);
340*8e1cb96dSvabridgers }
341*8e1cb96dSvabridgers 
342*8e1cb96dSvabridgers int checkNotEqualSameFunctionSameParam() {
343*8e1cb96dSvabridgers   unsigned a = 0;
344*8e1cb96dSvabridgers   unsigned b = 1;
345*8e1cb96dSvabridgers   int res = (a+funcParam(a) != a+funcParam(a));  // no warning
346*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:29: warning: both sides of operator are equivalent [misc-redundant-expression]
347*8e1cb96dSvabridgers   return (0);
348*8e1cb96dSvabridgers }
349*8e1cb96dSvabridgers 
350*8e1cb96dSvabridgers int checkNotEqualSameFunctionDifferentParam() {
351*8e1cb96dSvabridgers   unsigned a = 0;
352*8e1cb96dSvabridgers   unsigned b = 1;
353*8e1cb96dSvabridgers   int res = (a+funcParam(a) != a+funcParam(b));  // no warning
354*8e1cb96dSvabridgers   return (0);
355*8e1cb96dSvabridgers }
356*8e1cb96dSvabridgers 
357*8e1cb96dSvabridgers /*   end '!=' with function*/
358*8e1cb96dSvabridgers 
359*8e1cb96dSvabridgers /*   end '!=' */
360*8e1cb96dSvabridgers 
361*8e1cb96dSvabridgers 
362*8e1cb96dSvabridgers 
363*8e1cb96dSvabridgers /* EQ operator           */
364*8e1cb96dSvabridgers 
365*8e1cb96dSvabridgers int checkEqualIntPointerDeclCompare(void) {
366*8e1cb96dSvabridgers   int k = 3;
367*8e1cb96dSvabridgers   int* f = &k;
368*8e1cb96dSvabridgers   int* g = &k;
369*8e1cb96dSvabridgers   return (f == g); // no warning
370*8e1cb96dSvabridgers }
371*8e1cb96dSvabridgers 
372*8e1cb96dSvabridgers int checkEqualIntPointerDeclCompare0(void) {
373*8e1cb96dSvabridgers   int k = 3;
374*8e1cb96dSvabridgers   int* f = &k;
375*8e1cb96dSvabridgers   return (f+1 == f+1);
376*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:15: warning: both sides of operator are equivalent [misc-redundant-expression]
377*8e1cb96dSvabridgers }
378*8e1cb96dSvabridgers 
379*8e1cb96dSvabridgers /* EQ with float*/
380*8e1cb96dSvabridgers 
381*8e1cb96dSvabridgers int checkEqualFloatLiteralCompare1(void) {
382*8e1cb96dSvabridgers   return (5.14F == 5.14F); // no warning
383*8e1cb96dSvabridgers }
384*8e1cb96dSvabridgers 
385*8e1cb96dSvabridgers int checkEqualFloatLiteralCompare2(void) {
386*8e1cb96dSvabridgers   return (6.14F == 7.14F); // no warning
387*8e1cb96dSvabridgers }
388*8e1cb96dSvabridgers 
389*8e1cb96dSvabridgers int checkEqualFloatDeclCompare1(void) {
390*8e1cb96dSvabridgers   float f = 7.1F;
391*8e1cb96dSvabridgers   float g = 7.1F;
392*8e1cb96dSvabridgers   return (f == g); // no warning
393*8e1cb96dSvabridgers }
394*8e1cb96dSvabridgers 
395*8e1cb96dSvabridgers int checkEqualFloatDeclCompare12(void) {
396*8e1cb96dSvabridgers   float f = 7.1F;
397*8e1cb96dSvabridgers   return (f == f); // no warning
398*8e1cb96dSvabridgers }
399*8e1cb96dSvabridgers 
400*8e1cb96dSvabridgers 
401*8e1cb96dSvabridgers int checkEqualFloatDeclCompare3(void) {
402*8e1cb96dSvabridgers   float f = 7.1F;
403*8e1cb96dSvabridgers   return (f == 7.1F); // no warning
404*8e1cb96dSvabridgers }
405*8e1cb96dSvabridgers 
406*8e1cb96dSvabridgers int checkEqualFloatDeclCompare4(void) {
407*8e1cb96dSvabridgers   float f = 7.1F;
408*8e1cb96dSvabridgers   return (7.1F == f); // no warning
409*8e1cb96dSvabridgers }
410*8e1cb96dSvabridgers 
411*8e1cb96dSvabridgers int checkEqualFloatDeclCompare5(void) {
412*8e1cb96dSvabridgers   float f = 7.1F;
413*8e1cb96dSvabridgers   int t = 7;
414*8e1cb96dSvabridgers   return (t == f); // no warning
415*8e1cb96dSvabridgers }
416*8e1cb96dSvabridgers 
417*8e1cb96dSvabridgers int checkEqualFloatDeclCompare6(void) {
418*8e1cb96dSvabridgers   float f = 7.1F;
419*8e1cb96dSvabridgers   int t = 7;
420*8e1cb96dSvabridgers   return (f == t); // no warning
421*8e1cb96dSvabridgers }
422*8e1cb96dSvabridgers 
423*8e1cb96dSvabridgers 
424*8e1cb96dSvabridgers 
425*8e1cb96dSvabridgers 
426*8e1cb96dSvabridgers int checkEqualCastFloatDeclCompare11(void) {
427*8e1cb96dSvabridgers   float f = 7.1F;
428*8e1cb96dSvabridgers   return ((int)f == (int)f);
429*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
430*8e1cb96dSvabridgers }
431*8e1cb96dSvabridgers int checkEqualCastFloatDeclCompare12(void) {
432*8e1cb96dSvabridgers   float f = 7.1F;
433*8e1cb96dSvabridgers   return ((char)f == (int)f); // no warning
434*8e1cb96dSvabridgers }
435*8e1cb96dSvabridgers int checkEqualBinaryOpFloatCompare1(void) {
436*8e1cb96dSvabridgers   int res;
437*8e1cb96dSvabridgers   float f= 3.14F;
438*8e1cb96dSvabridgers   res = (f + 3.14F == f + 3.14F);
439*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:20: warning: both sides of operator are equivalent [misc-redundant-expression]
440*8e1cb96dSvabridgers   return (0);
441*8e1cb96dSvabridgers }
442*8e1cb96dSvabridgers int checkEqualBinaryOpFloatCompare2(void) {
443*8e1cb96dSvabridgers   float f = 7.1F;
444*8e1cb96dSvabridgers   float g = 7.1F;
445*8e1cb96dSvabridgers   return (f + 3.14F == g + 3.14F); // no warning
446*8e1cb96dSvabridgers }
447*8e1cb96dSvabridgers int checkEqualBinaryOpFloatCompare3(void) {
448*8e1cb96dSvabridgers   int res;
449*8e1cb96dSvabridgers   float f= 3.14F;
450*8e1cb96dSvabridgers   res = ((int)f + 3.14F == (int)f + 3.14F);
451*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:25: warning: both sides of operator are equivalent [misc-redundant-expression]
452*8e1cb96dSvabridgers   return (0);
453*8e1cb96dSvabridgers }
454*8e1cb96dSvabridgers int checkEqualBinaryOpFloatCompare4(void) {
455*8e1cb96dSvabridgers   int res;
456*8e1cb96dSvabridgers   float f= 3.14F;
457*8e1cb96dSvabridgers   res = ((int)f + 3.14F == (char)f + 3.14F);  // no warning
458*8e1cb96dSvabridgers   return (0);
459*8e1cb96dSvabridgers }
460*8e1cb96dSvabridgers 
461*8e1cb96dSvabridgers int checkEqualNestedBinaryOpFloatCompare1(void) {
462*8e1cb96dSvabridgers   int res;
463*8e1cb96dSvabridgers   int t= 1;
464*8e1cb96dSvabridgers   int u= 2;
465*8e1cb96dSvabridgers   float f= 3.14F;
466*8e1cb96dSvabridgers   res = (((int)f + (3.14F - u)*t) == ((int)f + (3.14F - u)*t));
467*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:35: warning: both sides of operator are equivalent [misc-redundant-expression]
468*8e1cb96dSvabridgers   return (0);
469*8e1cb96dSvabridgers }
470*8e1cb96dSvabridgers 
471*8e1cb96dSvabridgers int checkEqualNestedBinaryOpFloatCompare2(void) {
472*8e1cb96dSvabridgers   int res;
473*8e1cb96dSvabridgers   int t= 1;
474*8e1cb96dSvabridgers   int u= 2;
475*8e1cb96dSvabridgers   float f= 3.14F;
476*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) == ((int)f + (3.14F - u)*t));  // no warning
477*8e1cb96dSvabridgers   return (0);
478*8e1cb96dSvabridgers }
479*8e1cb96dSvabridgers 
480*8e1cb96dSvabridgers int checkEqualNestedBinaryOpFloatCompare3(void) {
481*8e1cb96dSvabridgers   int res;
482*8e1cb96dSvabridgers   int t= 1;
483*8e1cb96dSvabridgers   int u= 2;
484*8e1cb96dSvabridgers   float f= 3.14F;
485*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) == ((int)f + (3.14F - u)*(f + t == f + t)));
486*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:67: warning: both sides of operator are equivalent [misc-redundant-expression]
487*8e1cb96dSvabridgers   return (0);
488*8e1cb96dSvabridgers }
489*8e1cb96dSvabridgers 
490*8e1cb96dSvabridgers /* Equal with int*/
491*8e1cb96dSvabridgers 
492*8e1cb96dSvabridgers int checkEqualIntLiteralCompare1(void) {
493*8e1cb96dSvabridgers   return (5 == 5);
494*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
495*8e1cb96dSvabridgers }
496*8e1cb96dSvabridgers 
497*8e1cb96dSvabridgers int checkEqualIntLiteralCompare2(void) {
498*8e1cb96dSvabridgers   return (6 == 7); // no warning
499*8e1cb96dSvabridgers }
500*8e1cb96dSvabridgers 
501*8e1cb96dSvabridgers int checkEqualIntDeclCompare1(void) {
502*8e1cb96dSvabridgers   int f = 7;
503*8e1cb96dSvabridgers   int g = 7;
504*8e1cb96dSvabridgers   return (f == g); // no warning
505*8e1cb96dSvabridgers }
506*8e1cb96dSvabridgers 
507*8e1cb96dSvabridgers int checkEqualCastIntDeclCompare11(void) {
508*8e1cb96dSvabridgers   int f = 7;
509*8e1cb96dSvabridgers   return ((int)f == (int)f);
510*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
511*8e1cb96dSvabridgers }
512*8e1cb96dSvabridgers int checkEqualCastIntDeclCompare12(void) {
513*8e1cb96dSvabridgers   int f = 7;
514*8e1cb96dSvabridgers   return ((char)f == (int)f); // no warning
515*8e1cb96dSvabridgers }
516*8e1cb96dSvabridgers 
517*8e1cb96dSvabridgers int checkEqualIntDeclCompare3(void) {
518*8e1cb96dSvabridgers   int f = 7;
519*8e1cb96dSvabridgers   return (f == 7); // no warning
520*8e1cb96dSvabridgers }
521*8e1cb96dSvabridgers 
522*8e1cb96dSvabridgers int checkEqualIntDeclCompare4(void) {
523*8e1cb96dSvabridgers   int f = 7;
524*8e1cb96dSvabridgers   return (7 == f); // no warning
525*8e1cb96dSvabridgers }
526*8e1cb96dSvabridgers 
527*8e1cb96dSvabridgers int checkEqualBinaryOpIntCompare1(void) {
528*8e1cb96dSvabridgers   int res;
529*8e1cb96dSvabridgers   int t= 1;
530*8e1cb96dSvabridgers   int u= 2;
531*8e1cb96dSvabridgers   int f= 4;
532*8e1cb96dSvabridgers   res = (f + 4 == f + 4);
533*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:16: warning: both sides of operator are equivalent [misc-redundant-expression]
534*8e1cb96dSvabridgers   return (0);
535*8e1cb96dSvabridgers }
536*8e1cb96dSvabridgers int checkEqualBinaryOpIntCompare2(void) {
537*8e1cb96dSvabridgers   int f = 7;
538*8e1cb96dSvabridgers   int g = 7;
539*8e1cb96dSvabridgers   return (f + 4 == g + 4); // no warning
540*8e1cb96dSvabridgers }
541*8e1cb96dSvabridgers 
542*8e1cb96dSvabridgers 
543*8e1cb96dSvabridgers int checkEqualBinaryOpIntCompare3(void) {
544*8e1cb96dSvabridgers   int res;
545*8e1cb96dSvabridgers   int t= 1;
546*8e1cb96dSvabridgers   int u= 2;
547*8e1cb96dSvabridgers   int f= 4;
548*8e1cb96dSvabridgers   res = ((int)f + 4 == (int)f + 4);
549*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:21: warning: both sides of operator are equivalent [misc-redundant-expression]
550*8e1cb96dSvabridgers   return (0);
551*8e1cb96dSvabridgers 
552*8e1cb96dSvabridgers }
553*8e1cb96dSvabridgers int checkEqualBinaryOpIntCompare4(void) {
554*8e1cb96dSvabridgers   int res;
555*8e1cb96dSvabridgers   int t= 1;
556*8e1cb96dSvabridgers   int u= 2;
557*8e1cb96dSvabridgers   int f= 4;
558*8e1cb96dSvabridgers   res = ((int)f + 4 == (char)f + 4);  // no warning
559*8e1cb96dSvabridgers   return (0);
560*8e1cb96dSvabridgers }
561*8e1cb96dSvabridgers int checkEqualBinaryOpIntCompare5(void) {
562*8e1cb96dSvabridgers   int res;
563*8e1cb96dSvabridgers   int t= 1;
564*8e1cb96dSvabridgers   int u= 2;
565*8e1cb96dSvabridgers   res = (u + t == u + t);
566*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:16: warning: both sides of operator are equivalent [misc-redundant-expression]
567*8e1cb96dSvabridgers   return (0);
568*8e1cb96dSvabridgers }
569*8e1cb96dSvabridgers 
570*8e1cb96dSvabridgers int checkEqualNestedBinaryOpIntCompare1(void) {
571*8e1cb96dSvabridgers   int res;
572*8e1cb96dSvabridgers   int t= 1;
573*8e1cb96dSvabridgers   int u= 2;
574*8e1cb96dSvabridgers   int f= 3;
575*8e1cb96dSvabridgers   res = (((int)f + (3 - u)*t) == ((int)f + (3 - u)*t));
576*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:31: warning: both sides of operator are equivalent [misc-redundant-expression]
577*8e1cb96dSvabridgers   return (0);
578*8e1cb96dSvabridgers }
579*8e1cb96dSvabridgers 
580*8e1cb96dSvabridgers int checkEqualNestedBinaryOpIntCompare2(void) {
581*8e1cb96dSvabridgers   int res;
582*8e1cb96dSvabridgers   int t= 1;
583*8e1cb96dSvabridgers   int u= 2;
584*8e1cb96dSvabridgers   int f= 3;
585*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) == ((int)f + (3 - u)*t));  // no warning
586*8e1cb96dSvabridgers   return (0);
587*8e1cb96dSvabridgers }
588*8e1cb96dSvabridgers 
589*8e1cb96dSvabridgers int checkEqualNestedBinaryOpIntCompare3(void) {
590*8e1cb96dSvabridgers   int res;
591*8e1cb96dSvabridgers   int t= 1;
592*8e1cb96dSvabridgers   int u= 2;
593*8e1cb96dSvabridgers   int f= 3;
594*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) == ((int)f + (3 - u)*(t + 1 == t + 1)));
595*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:59: warning: both sides of operator are equivalent [misc-redundant-expression]
596*8e1cb96dSvabridgers   return (0);
597*8e1cb96dSvabridgers }
598*8e1cb96dSvabridgers 
599*8e1cb96dSvabridgers /* '==' with function*/
600*8e1cb96dSvabridgers 
601*8e1cb96dSvabridgers int checkEqualSameFunction() {
602*8e1cb96dSvabridgers   unsigned a = 0;
603*8e1cb96dSvabridgers   unsigned b = 1;
604*8e1cb96dSvabridgers   int res = (a+func() == a+func());
605*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:23: warning: both sides of operator are equivalent [misc-redundant-expression]
606*8e1cb96dSvabridgers   return (0);
607*8e1cb96dSvabridgers }
608*8e1cb96dSvabridgers 
609*8e1cb96dSvabridgers int checkEqualDifferentFunction() {
610*8e1cb96dSvabridgers   unsigned a = 0;
611*8e1cb96dSvabridgers   unsigned b = 1;
612*8e1cb96dSvabridgers   int res = (a+func() == a+func2());  // no warning
613*8e1cb96dSvabridgers   return (0);
614*8e1cb96dSvabridgers }
615*8e1cb96dSvabridgers 
616*8e1cb96dSvabridgers int checkEqualSameFunctionSameParam() {
617*8e1cb96dSvabridgers   unsigned a = 0;
618*8e1cb96dSvabridgers   unsigned b = 1;
619*8e1cb96dSvabridgers   int res = (a+funcParam(a) == a+funcParam(a));
620*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:29: warning: both sides of operator are equivalent [misc-redundant-expression]
621*8e1cb96dSvabridgers   return (0);
622*8e1cb96dSvabridgers }
623*8e1cb96dSvabridgers 
624*8e1cb96dSvabridgers int checkEqualSameFunctionDifferentParam() {
625*8e1cb96dSvabridgers   unsigned a = 0;
626*8e1cb96dSvabridgers   unsigned b = 1;
627*8e1cb96dSvabridgers   int res = (a+funcParam(a) == a+funcParam(b));  // no warning
628*8e1cb96dSvabridgers   return (0);
629*8e1cb96dSvabridgers }
630*8e1cb96dSvabridgers 
631*8e1cb96dSvabridgers /*   end '==' with function*/
632*8e1cb96dSvabridgers 
633*8e1cb96dSvabridgers /*   end EQ int          */
634*8e1cb96dSvabridgers 
635*8e1cb96dSvabridgers /* end EQ */
636*8e1cb96dSvabridgers 
637*8e1cb96dSvabridgers 
638*8e1cb96dSvabridgers /*  LT */
639*8e1cb96dSvabridgers 
640*8e1cb96dSvabridgers /*  LT with float */
641*8e1cb96dSvabridgers 
642*8e1cb96dSvabridgers int checkLessThanFloatLiteralCompare1(void) {
643*8e1cb96dSvabridgers   return (5.14F < 5.14F);
644*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:17: warning: both sides of operator are equivalent [misc-redundant-expression]
645*8e1cb96dSvabridgers }
646*8e1cb96dSvabridgers 
647*8e1cb96dSvabridgers int checkLessThanFloatLiteralCompare2(void) {
648*8e1cb96dSvabridgers   return (6.14F < 7.14F); // no warning
649*8e1cb96dSvabridgers }
650*8e1cb96dSvabridgers 
651*8e1cb96dSvabridgers int checkLessThanFloatDeclCompare1(void) {
652*8e1cb96dSvabridgers   float f = 7.1F;
653*8e1cb96dSvabridgers   float g = 7.1F;
654*8e1cb96dSvabridgers   return (f < g); // no warning
655*8e1cb96dSvabridgers }
656*8e1cb96dSvabridgers 
657*8e1cb96dSvabridgers int checkLessThanFloatDeclCompare12(void) {
658*8e1cb96dSvabridgers   float f = 7.1F;
659*8e1cb96dSvabridgers   return (f < f);
660*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
661*8e1cb96dSvabridgers }
662*8e1cb96dSvabridgers 
663*8e1cb96dSvabridgers int checkLessThanFloatDeclCompare3(void) {
664*8e1cb96dSvabridgers   float f = 7.1F;
665*8e1cb96dSvabridgers   return (f < 7.1F); // no warning
666*8e1cb96dSvabridgers }
667*8e1cb96dSvabridgers 
668*8e1cb96dSvabridgers int checkLessThanFloatDeclCompare4(void) {
669*8e1cb96dSvabridgers   float f = 7.1F;
670*8e1cb96dSvabridgers   return (7.1F < f); // no warning
671*8e1cb96dSvabridgers }
672*8e1cb96dSvabridgers 
673*8e1cb96dSvabridgers int checkLessThanFloatDeclCompare5(void) {
674*8e1cb96dSvabridgers   float f = 7.1F;
675*8e1cb96dSvabridgers   int t = 7;
676*8e1cb96dSvabridgers   return (t < f); // no warning
677*8e1cb96dSvabridgers }
678*8e1cb96dSvabridgers 
679*8e1cb96dSvabridgers int checkLessThanFloatDeclCompare6(void) {
680*8e1cb96dSvabridgers   float f = 7.1F;
681*8e1cb96dSvabridgers   int t = 7;
682*8e1cb96dSvabridgers   return (f < t); // no warning
683*8e1cb96dSvabridgers }
684*8e1cb96dSvabridgers 
685*8e1cb96dSvabridgers 
686*8e1cb96dSvabridgers int checkLessThanCastFloatDeclCompare11(void) {
687*8e1cb96dSvabridgers   float f = 7.1F;
688*8e1cb96dSvabridgers   return ((int)f < (int)f);
689*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
690*8e1cb96dSvabridgers }
691*8e1cb96dSvabridgers int checkLessThanCastFloatDeclCompare12(void) {
692*8e1cb96dSvabridgers   float f = 7.1F;
693*8e1cb96dSvabridgers   return ((char)f < (int)f); // no warning
694*8e1cb96dSvabridgers }
695*8e1cb96dSvabridgers int checkLessThanBinaryOpFloatCompare1(void) {
696*8e1cb96dSvabridgers   int res;
697*8e1cb96dSvabridgers   float f= 3.14F;
698*8e1cb96dSvabridgers   res = (f + 3.14F < f + 3.14F);
699*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:20: warning: both sides of operator are equivalent [misc-redundant-expression]
700*8e1cb96dSvabridgers   return (0);
701*8e1cb96dSvabridgers }
702*8e1cb96dSvabridgers int checkLessThanBinaryOpFloatCompare2(void) {
703*8e1cb96dSvabridgers   float f = 7.1F;
704*8e1cb96dSvabridgers   float g = 7.1F;
705*8e1cb96dSvabridgers   return (f + 3.14F < g + 3.14F); // no warning
706*8e1cb96dSvabridgers }
707*8e1cb96dSvabridgers int checkLessThanBinaryOpFloatCompare3(void) {
708*8e1cb96dSvabridgers   int res;
709*8e1cb96dSvabridgers   float f= 3.14F;
710*8e1cb96dSvabridgers   res = ((int)f + 3.14F < (int)f + 3.14F);
711*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:25: warning: both sides of operator are equivalent [misc-redundant-expression]
712*8e1cb96dSvabridgers   return (0);
713*8e1cb96dSvabridgers }
714*8e1cb96dSvabridgers int checkLessThanBinaryOpFloatCompare4(void) {
715*8e1cb96dSvabridgers   int res;
716*8e1cb96dSvabridgers   float f= 3.14F;
717*8e1cb96dSvabridgers   res = ((int)f + 3.14F < (char)f + 3.14F);  // no warning
718*8e1cb96dSvabridgers   return (0);
719*8e1cb96dSvabridgers }
720*8e1cb96dSvabridgers 
721*8e1cb96dSvabridgers int checkLessThanNestedBinaryOpFloatCompare1(void) {
722*8e1cb96dSvabridgers   int res;
723*8e1cb96dSvabridgers   int t= 1;
724*8e1cb96dSvabridgers   int u= 2;
725*8e1cb96dSvabridgers   float f= 3.14F;
726*8e1cb96dSvabridgers   res = (((int)f + (3.14F - u)*t) < ((int)f + (3.14F - u)*t));
727*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:35: warning: both sides of operator are equivalent [misc-redundant-expression]
728*8e1cb96dSvabridgers   return (0);
729*8e1cb96dSvabridgers }
730*8e1cb96dSvabridgers 
731*8e1cb96dSvabridgers int checkLessThanNestedBinaryOpFloatCompare2(void) {
732*8e1cb96dSvabridgers   int res;
733*8e1cb96dSvabridgers   int t= 1;
734*8e1cb96dSvabridgers   int u= 2;
735*8e1cb96dSvabridgers   float f= 3.14F;
736*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) < ((int)f + (3.14F - u)*t));  // no warning
737*8e1cb96dSvabridgers   return (0);
738*8e1cb96dSvabridgers }
739*8e1cb96dSvabridgers 
740*8e1cb96dSvabridgers int checkLessThanNestedBinaryOpFloatCompare3(void) {
741*8e1cb96dSvabridgers   int res;
742*8e1cb96dSvabridgers   int t= 1;
743*8e1cb96dSvabridgers   int u= 2;
744*8e1cb96dSvabridgers   float f= 3.14F;
745*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) < ((int)f + (3.14F - u)*(f + t < f + t)));
746*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:66: warning: both sides of operator are equivalent [misc-redundant-expression]
747*8e1cb96dSvabridgers   return (0);
748*8e1cb96dSvabridgers }
749*8e1cb96dSvabridgers 
750*8e1cb96dSvabridgers /*  end LT with float */
751*8e1cb96dSvabridgers 
752*8e1cb96dSvabridgers /*  LT with int */
753*8e1cb96dSvabridgers 
754*8e1cb96dSvabridgers 
755*8e1cb96dSvabridgers int checkLessThanIntLiteralCompare1(void) {
756*8e1cb96dSvabridgers   return (5 < 5);
757*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
758*8e1cb96dSvabridgers }
759*8e1cb96dSvabridgers 
760*8e1cb96dSvabridgers int checkLessThanIntLiteralCompare2(void) {
761*8e1cb96dSvabridgers   return (6 < 7); // no warning
762*8e1cb96dSvabridgers }
763*8e1cb96dSvabridgers 
764*8e1cb96dSvabridgers int checkLessThanIntDeclCompare1(void) {
765*8e1cb96dSvabridgers   int f = 7;
766*8e1cb96dSvabridgers   int g = 7;
767*8e1cb96dSvabridgers   return (f < g); // no warning
768*8e1cb96dSvabridgers }
769*8e1cb96dSvabridgers 
770*8e1cb96dSvabridgers int checkLessThanIntDeclCompare3(void) {
771*8e1cb96dSvabridgers   int f = 7;
772*8e1cb96dSvabridgers   return (f < 7); // no warning
773*8e1cb96dSvabridgers }
774*8e1cb96dSvabridgers 
775*8e1cb96dSvabridgers int checkLessThanIntDeclCompare4(void) {
776*8e1cb96dSvabridgers   int f = 7;
777*8e1cb96dSvabridgers   return (7 < f); // no warning
778*8e1cb96dSvabridgers }
779*8e1cb96dSvabridgers 
780*8e1cb96dSvabridgers int checkLessThanIntDeclCompare5(void) {
781*8e1cb96dSvabridgers   int f = 7;
782*8e1cb96dSvabridgers   int t = 7;
783*8e1cb96dSvabridgers   return (t < f); // no warning
784*8e1cb96dSvabridgers }
785*8e1cb96dSvabridgers 
786*8e1cb96dSvabridgers int checkLessThanIntDeclCompare6(void) {
787*8e1cb96dSvabridgers   int f = 7;
788*8e1cb96dSvabridgers   int t = 7;
789*8e1cb96dSvabridgers   return (f < t); // no warning
790*8e1cb96dSvabridgers }
791*8e1cb96dSvabridgers 
792*8e1cb96dSvabridgers int checkLessThanCastIntDeclCompare11(void) {
793*8e1cb96dSvabridgers   int f = 7;
794*8e1cb96dSvabridgers   return ((int)f < (int)f);
795*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
796*8e1cb96dSvabridgers }
797*8e1cb96dSvabridgers int checkLessThanCastIntDeclCompare12(void) {
798*8e1cb96dSvabridgers   int f = 7;
799*8e1cb96dSvabridgers   return ((char)f < (int)f); // no warning
800*8e1cb96dSvabridgers }
801*8e1cb96dSvabridgers int checkLessThanBinaryOpIntCompare1(void) {
802*8e1cb96dSvabridgers   int res;
803*8e1cb96dSvabridgers   int f= 3;
804*8e1cb96dSvabridgers   res = (f + 3 < f + 3);
805*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:16: warning: both sides of operator are equivalent [misc-redundant-expression]
806*8e1cb96dSvabridgers   return (0);
807*8e1cb96dSvabridgers }
808*8e1cb96dSvabridgers int checkLessThanBinaryOpIntCompare2(void) {
809*8e1cb96dSvabridgers   int f = 7;
810*8e1cb96dSvabridgers   int g = 7;
811*8e1cb96dSvabridgers   return (f + 3 < g + 3); // no warning
812*8e1cb96dSvabridgers }
813*8e1cb96dSvabridgers int checkLessThanBinaryOpIntCompare3(void) {
814*8e1cb96dSvabridgers   int res;
815*8e1cb96dSvabridgers   int f= 3;
816*8e1cb96dSvabridgers   res = ((int)f + 3 < (int)f + 3);
817*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:21: warning: both sides of operator are equivalent [misc-redundant-expression]
818*8e1cb96dSvabridgers   return (0);
819*8e1cb96dSvabridgers }
820*8e1cb96dSvabridgers int checkLessThanBinaryOpIntCompare4(void) {
821*8e1cb96dSvabridgers   int res;
822*8e1cb96dSvabridgers   int f= 3;
823*8e1cb96dSvabridgers   res = ((int)f + 3 < (char)f + 3);  // no warning
824*8e1cb96dSvabridgers   return (0);
825*8e1cb96dSvabridgers }
826*8e1cb96dSvabridgers 
827*8e1cb96dSvabridgers int checkLessThanNestedBinaryOpIntCompare1(void) {
828*8e1cb96dSvabridgers   int res;
829*8e1cb96dSvabridgers   int t= 1;
830*8e1cb96dSvabridgers   int u= 2;
831*8e1cb96dSvabridgers   int f= 3;
832*8e1cb96dSvabridgers   res = (((int)f + (3 - u)*t) < ((int)f + (3 - u)*t));
833*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:31: warning: both sides of operator are equivalent [misc-redundant-expression]
834*8e1cb96dSvabridgers   return (0);
835*8e1cb96dSvabridgers }
836*8e1cb96dSvabridgers 
837*8e1cb96dSvabridgers int checkLessThanNestedBinaryOpIntCompare2(void) {
838*8e1cb96dSvabridgers   int res;
839*8e1cb96dSvabridgers   int t= 1;
840*8e1cb96dSvabridgers   int u= 2;
841*8e1cb96dSvabridgers   int f= 3;
842*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) < ((int)f + (3 - u)*t));  // no warning
843*8e1cb96dSvabridgers   return (0);
844*8e1cb96dSvabridgers }
845*8e1cb96dSvabridgers 
846*8e1cb96dSvabridgers int checkLessThanNestedBinaryOpIntCompare3(void) {
847*8e1cb96dSvabridgers   int res;
848*8e1cb96dSvabridgers   int t= 1;
849*8e1cb96dSvabridgers   int u= 2;
850*8e1cb96dSvabridgers   int f= 3;
851*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) < ((int)f + (3 - u)*(t + u < t + u)));
852*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:58: warning: both sides of operator are equivalent [misc-redundant-expression]
853*8e1cb96dSvabridgers   return (0);
854*8e1cb96dSvabridgers }
855*8e1cb96dSvabridgers 
856*8e1cb96dSvabridgers /* end LT with int */
857*8e1cb96dSvabridgers 
858*8e1cb96dSvabridgers /* end LT */
859*8e1cb96dSvabridgers 
860*8e1cb96dSvabridgers 
861*8e1cb96dSvabridgers /* GT */
862*8e1cb96dSvabridgers 
863*8e1cb96dSvabridgers /* GT with float */
864*8e1cb96dSvabridgers 
865*8e1cb96dSvabridgers int checkGreaterThanFloatLiteralCompare1(void) {
866*8e1cb96dSvabridgers   return (5.14F > 5.14F);
867*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:17: warning: both sides of operator are equivalent [misc-redundant-expression]
868*8e1cb96dSvabridgers }
869*8e1cb96dSvabridgers 
870*8e1cb96dSvabridgers int checkGreaterThanFloatLiteralCompare2(void) {
871*8e1cb96dSvabridgers   return (6.14F > 7.14F); // no warning
872*8e1cb96dSvabridgers }
873*8e1cb96dSvabridgers 
874*8e1cb96dSvabridgers int checkGreaterThanFloatDeclCompare1(void) {
875*8e1cb96dSvabridgers   float f = 7.1F;
876*8e1cb96dSvabridgers   float g = 7.1F;
877*8e1cb96dSvabridgers 
878*8e1cb96dSvabridgers   return (f > g); // no warning
879*8e1cb96dSvabridgers }
880*8e1cb96dSvabridgers 
881*8e1cb96dSvabridgers int checkGreaterThanFloatDeclCompare12(void) {
882*8e1cb96dSvabridgers   float f = 7.1F;
883*8e1cb96dSvabridgers   return (f > f);
884*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
885*8e1cb96dSvabridgers }
886*8e1cb96dSvabridgers 
887*8e1cb96dSvabridgers 
888*8e1cb96dSvabridgers int checkGreaterThanFloatDeclCompare3(void) {
889*8e1cb96dSvabridgers   float f = 7.1F;
890*8e1cb96dSvabridgers   return (f > 7.1F); // no warning
891*8e1cb96dSvabridgers }
892*8e1cb96dSvabridgers 
893*8e1cb96dSvabridgers int checkGreaterThanFloatDeclCompare4(void) {
894*8e1cb96dSvabridgers   float f = 7.1F;
895*8e1cb96dSvabridgers   return (7.1F > f); // no warning
896*8e1cb96dSvabridgers }
897*8e1cb96dSvabridgers 
898*8e1cb96dSvabridgers int checkGreaterThanFloatDeclCompare5(void) {
899*8e1cb96dSvabridgers   float f = 7.1F;
900*8e1cb96dSvabridgers   int t = 7;
901*8e1cb96dSvabridgers   return (t > f); // no warning
902*8e1cb96dSvabridgers }
903*8e1cb96dSvabridgers 
904*8e1cb96dSvabridgers int checkGreaterThanFloatDeclCompare6(void) {
905*8e1cb96dSvabridgers   float f = 7.1F;
906*8e1cb96dSvabridgers   int t = 7;
907*8e1cb96dSvabridgers   return (f > t); // no warning
908*8e1cb96dSvabridgers }
909*8e1cb96dSvabridgers 
910*8e1cb96dSvabridgers int checkGreaterThanCastFloatDeclCompare11(void) {
911*8e1cb96dSvabridgers   float f = 7.1F;
912*8e1cb96dSvabridgers   return ((int)f > (int)f);
913*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
914*8e1cb96dSvabridgers }
915*8e1cb96dSvabridgers int checkGreaterThanCastFloatDeclCompare12(void) {
916*8e1cb96dSvabridgers   float f = 7.1F;
917*8e1cb96dSvabridgers   return ((char)f > (int)f); // no warning
918*8e1cb96dSvabridgers }
919*8e1cb96dSvabridgers int checkGreaterThanBinaryOpFloatCompare1(void) {
920*8e1cb96dSvabridgers   int res;
921*8e1cb96dSvabridgers   float f= 3.14F;
922*8e1cb96dSvabridgers   res = (f + 3.14F > f + 3.14F);
923*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:20: warning: both sides of operator are equivalent [misc-redundant-expression]
924*8e1cb96dSvabridgers   return (0);
925*8e1cb96dSvabridgers }
926*8e1cb96dSvabridgers int checkGreaterThanBinaryOpFloatCompare2(void) {
927*8e1cb96dSvabridgers   float f = 7.1F;
928*8e1cb96dSvabridgers   float g = 7.1F;
929*8e1cb96dSvabridgers   return (f + 3.14F > g + 3.14F); // no warning
930*8e1cb96dSvabridgers }
931*8e1cb96dSvabridgers int checkGreaterThanBinaryOpFloatCompare3(void) {
932*8e1cb96dSvabridgers   int res;
933*8e1cb96dSvabridgers   float f= 3.14F;
934*8e1cb96dSvabridgers   res = ((int)f + 3.14F > (int)f + 3.14F);
935*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:25: warning: both sides of operator are equivalent [misc-redundant-expression]
936*8e1cb96dSvabridgers   return (0);
937*8e1cb96dSvabridgers }
938*8e1cb96dSvabridgers int checkGreaterThanBinaryOpFloatCompare4(void) {
939*8e1cb96dSvabridgers   int res;
940*8e1cb96dSvabridgers   float f= 3.14F;
941*8e1cb96dSvabridgers   res = ((int)f + 3.14F > (char)f + 3.14F);  // no warning
942*8e1cb96dSvabridgers   return (0);
943*8e1cb96dSvabridgers }
944*8e1cb96dSvabridgers 
945*8e1cb96dSvabridgers int checkGreaterThanNestedBinaryOpFloatCompare1(void) {
946*8e1cb96dSvabridgers   int res;
947*8e1cb96dSvabridgers   int t= 1;
948*8e1cb96dSvabridgers   int u= 2;
949*8e1cb96dSvabridgers   float f= 3.14F;
950*8e1cb96dSvabridgers   res = (((int)f + (3.14F - u)*t) > ((int)f + (3.14F - u)*t));
951*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:35: warning: both sides of operator are equivalent [misc-redundant-expression]
952*8e1cb96dSvabridgers   return (0);
953*8e1cb96dSvabridgers }
954*8e1cb96dSvabridgers 
955*8e1cb96dSvabridgers int checkGreaterThanNestedBinaryOpFloatCompare2(void) {
956*8e1cb96dSvabridgers   int res;
957*8e1cb96dSvabridgers   int t= 1;
958*8e1cb96dSvabridgers   int u= 2;
959*8e1cb96dSvabridgers   float f= 3.14F;
960*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) > ((int)f + (3.14F - u)*t));  // no warning
961*8e1cb96dSvabridgers   return (0);
962*8e1cb96dSvabridgers }
963*8e1cb96dSvabridgers 
964*8e1cb96dSvabridgers int checkGreaterThanNestedBinaryOpFloatCompare3(void) {
965*8e1cb96dSvabridgers   int res;
966*8e1cb96dSvabridgers   int t= 1;
967*8e1cb96dSvabridgers   int u= 2;
968*8e1cb96dSvabridgers   float f= 3.14F;
969*8e1cb96dSvabridgers   res = (((int)f + (u - 3.14F)*t) > ((int)f + (3.14F - u)*(f + t > f + t)));  // no warning
970*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:66: warning: both sides of operator are equivalent [misc-redundant-expression]
971*8e1cb96dSvabridgers   return (0);
972*8e1cb96dSvabridgers }
973*8e1cb96dSvabridgers 
974*8e1cb96dSvabridgers /*  end GT with float */
975*8e1cb96dSvabridgers 
976*8e1cb96dSvabridgers /*  GT with int */
977*8e1cb96dSvabridgers 
978*8e1cb96dSvabridgers 
979*8e1cb96dSvabridgers int checkGreaterThanIntLiteralCompare1(void) {
980*8e1cb96dSvabridgers   return (5 > 5);
981*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
982*8e1cb96dSvabridgers }
983*8e1cb96dSvabridgers 
984*8e1cb96dSvabridgers int checkGreaterThanIntLiteralCompare2(void) {
985*8e1cb96dSvabridgers   return (6 > 7); // no warning
986*8e1cb96dSvabridgers }
987*8e1cb96dSvabridgers 
988*8e1cb96dSvabridgers int checkGreaterThanIntDeclCompare1(void) {
989*8e1cb96dSvabridgers   int f = 7;
990*8e1cb96dSvabridgers   int g = 7;
991*8e1cb96dSvabridgers 
992*8e1cb96dSvabridgers   return (f > g); // no warning
993*8e1cb96dSvabridgers }
994*8e1cb96dSvabridgers 
995*8e1cb96dSvabridgers int checkGreaterThanIntDeclCompare3(void) {
996*8e1cb96dSvabridgers   int f = 7;
997*8e1cb96dSvabridgers   return (f > 7); // no warning
998*8e1cb96dSvabridgers }
999*8e1cb96dSvabridgers 
1000*8e1cb96dSvabridgers int checkGreaterThanIntDeclCompare4(void) {
1001*8e1cb96dSvabridgers   int f = 7;
1002*8e1cb96dSvabridgers   return (7 > f); // no warning
1003*8e1cb96dSvabridgers }
1004*8e1cb96dSvabridgers 
1005*8e1cb96dSvabridgers int checkGreaterThanCastIntDeclCompare11(void) {
1006*8e1cb96dSvabridgers   int f = 7;
1007*8e1cb96dSvabridgers   return ((int)f > (int)f);
1008*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
1009*8e1cb96dSvabridgers }
1010*8e1cb96dSvabridgers int checkGreaterThanCastIntDeclCompare12(void) {
1011*8e1cb96dSvabridgers   int f = 7;
1012*8e1cb96dSvabridgers   return ((char)f > (int)f); // no warning
1013*8e1cb96dSvabridgers }
1014*8e1cb96dSvabridgers int checkGreaterThanBinaryOpIntCompare1(void) {
1015*8e1cb96dSvabridgers   int res;
1016*8e1cb96dSvabridgers   int f= 3;
1017*8e1cb96dSvabridgers   res = (f + 3 > f + 3);
1018*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:16: warning: both sides of operator are equivalent [misc-redundant-expression]
1019*8e1cb96dSvabridgers   return (0);
1020*8e1cb96dSvabridgers }
1021*8e1cb96dSvabridgers int checkGreaterThanBinaryOpIntCompare2(void) {
1022*8e1cb96dSvabridgers   int f = 7;
1023*8e1cb96dSvabridgers   int g = 7;
1024*8e1cb96dSvabridgers   return (f + 3 > g + 3); // no warning
1025*8e1cb96dSvabridgers }
1026*8e1cb96dSvabridgers int checkGreaterThanBinaryOpIntCompare3(void) {
1027*8e1cb96dSvabridgers   int res;
1028*8e1cb96dSvabridgers   int f= 3;
1029*8e1cb96dSvabridgers   res = ((int)f + 3 > (int)f + 3);
1030*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:21: warning: both sides of operator are equivalent [misc-redundant-expression]
1031*8e1cb96dSvabridgers   return (0);
1032*8e1cb96dSvabridgers }
1033*8e1cb96dSvabridgers int checkGreaterThanBinaryOpIntCompare4(void) {
1034*8e1cb96dSvabridgers   int res;
1035*8e1cb96dSvabridgers   int f= 3;
1036*8e1cb96dSvabridgers   res = ((int)f + 3 > (char)f + 3);  // no warning
1037*8e1cb96dSvabridgers   return (0);
1038*8e1cb96dSvabridgers }
1039*8e1cb96dSvabridgers 
1040*8e1cb96dSvabridgers int checkGreaterThanNestedBinaryOpIntCompare1(void) {
1041*8e1cb96dSvabridgers   int res;
1042*8e1cb96dSvabridgers   int t= 1;
1043*8e1cb96dSvabridgers   int u= 2;
1044*8e1cb96dSvabridgers   int f= 3;
1045*8e1cb96dSvabridgers   res = (((int)f + (3 - u)*t) > ((int)f + (3 - u)*t));
1046*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:31: warning: both sides of operator are equivalent [misc-redundant-expression]
1047*8e1cb96dSvabridgers   return (0);
1048*8e1cb96dSvabridgers }
1049*8e1cb96dSvabridgers 
1050*8e1cb96dSvabridgers int checkGreaterThanNestedBinaryOpIntCompare2(void) {
1051*8e1cb96dSvabridgers   int res;
1052*8e1cb96dSvabridgers   int t= 1;
1053*8e1cb96dSvabridgers   int u= 2;
1054*8e1cb96dSvabridgers   int f= 3;
1055*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) > ((int)f + (3 - u)*t));  // no warning
1056*8e1cb96dSvabridgers   return (0);
1057*8e1cb96dSvabridgers }
1058*8e1cb96dSvabridgers 
1059*8e1cb96dSvabridgers int checkGreaterThanNestedBinaryOpIntCompare3(void) {
1060*8e1cb96dSvabridgers   int res;
1061*8e1cb96dSvabridgers   int t= 1;
1062*8e1cb96dSvabridgers   int u= 2;
1063*8e1cb96dSvabridgers   int f= 3;
1064*8e1cb96dSvabridgers   res = (((int)f + (u - 3)*t) > ((int)f + (3 - u)*(t + u > t + u)));
1065*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:58: warning: both sides of operator are equivalent [misc-redundant-expression]
1066*8e1cb96dSvabridgers   return (0);
1067*8e1cb96dSvabridgers }
1068*8e1cb96dSvabridgers 
1069*8e1cb96dSvabridgers /* end GT with int */
1070*8e1cb96dSvabridgers 
1071*8e1cb96dSvabridgers /* end GT */
1072*8e1cb96dSvabridgers 
1073*8e1cb96dSvabridgers 
1074*8e1cb96dSvabridgers /* Checking use of identical expressions in conditional operator*/
1075*8e1cb96dSvabridgers 
1076*8e1cb96dSvabridgers unsigned test_unsigned(unsigned a) {
1077*8e1cb96dSvabridgers   unsigned b = 1;
1078*8e1cb96dSvabridgers   a = a > 5 ? b : b;
1079*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:17: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1080*8e1cb96dSvabridgers   return a;
1081*8e1cb96dSvabridgers }
1082*8e1cb96dSvabridgers 
1083*8e1cb96dSvabridgers void test_signed() {
1084*8e1cb96dSvabridgers   int a = 0;
1085*8e1cb96dSvabridgers   a = a > 5 ? a : a;
1086*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:17: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1087*8e1cb96dSvabridgers }
1088*8e1cb96dSvabridgers 
1089*8e1cb96dSvabridgers void test_bool(bool a) {
1090*8e1cb96dSvabridgers   a = a > 0 ? a : a;
1091*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:17: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1092*8e1cb96dSvabridgers }
1093*8e1cb96dSvabridgers 
1094*8e1cb96dSvabridgers void test_float() {
1095*8e1cb96dSvabridgers   float a = 0;
1096*8e1cb96dSvabridgers   float b = 0;
1097*8e1cb96dSvabridgers   a = a > 5 ? a : a;
1098*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:17: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1099*8e1cb96dSvabridgers }
1100*8e1cb96dSvabridgers 
1101*8e1cb96dSvabridgers const char *test_string() {
1102*8e1cb96dSvabridgers   float a = 0;
1103*8e1cb96dSvabridgers   return a > 5 ? "abc" : "abc";
1104*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:24: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1105*8e1cb96dSvabridgers }
1106*8e1cb96dSvabridgers 
1107*8e1cb96dSvabridgers void test_unsigned_expr() {
1108*8e1cb96dSvabridgers   unsigned a = 0;
1109*8e1cb96dSvabridgers   unsigned b = 0;
1110*8e1cb96dSvabridgers   a = a > 5 ? a+b : a+b;
1111*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:19: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1112*8e1cb96dSvabridgers }
1113*8e1cb96dSvabridgers 
1114*8e1cb96dSvabridgers void test_signed_expr() {
1115*8e1cb96dSvabridgers   int a = 0;
1116*8e1cb96dSvabridgers   int b = 1;
1117*8e1cb96dSvabridgers   a = a > 5 ? a+b : a+b;
1118*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:19: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1119*8e1cb96dSvabridgers }
1120*8e1cb96dSvabridgers 
1121*8e1cb96dSvabridgers void test_bool_expr(bool a) {
1122*8e1cb96dSvabridgers   bool b = 0;
1123*8e1cb96dSvabridgers   a = a > 0 ? a&&b : a&&b;
1124*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:20: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1125*8e1cb96dSvabridgers }
1126*8e1cb96dSvabridgers 
1127*8e1cb96dSvabridgers void test_unsigned_expr_negative() {
1128*8e1cb96dSvabridgers   unsigned a = 0;
1129*8e1cb96dSvabridgers   unsigned b = 0;
1130*8e1cb96dSvabridgers   a = a > 5 ? a+b : b+a; // no warning
1131*8e1cb96dSvabridgers }
1132*8e1cb96dSvabridgers 
1133*8e1cb96dSvabridgers void test_signed_expr_negative() {
1134*8e1cb96dSvabridgers   int a = 0;
1135*8e1cb96dSvabridgers   int b = 1;
1136*8e1cb96dSvabridgers   a = a > 5 ? b+a : a+b; // no warning
1137*8e1cb96dSvabridgers }
1138*8e1cb96dSvabridgers 
1139*8e1cb96dSvabridgers void test_bool_expr_negative(bool a) {
1140*8e1cb96dSvabridgers   bool b = 0;
1141*8e1cb96dSvabridgers   a = a > 0 ? a&&b : b&&a; // no warning
1142*8e1cb96dSvabridgers }
1143*8e1cb96dSvabridgers 
1144*8e1cb96dSvabridgers void test_float_expr_positive() {
1145*8e1cb96dSvabridgers   float a = 0;
1146*8e1cb96dSvabridgers   float b = 0;
1147*8e1cb96dSvabridgers   a = a > 5 ? a+b : a+b;
1148*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:19: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1149*8e1cb96dSvabridgers }
1150*8e1cb96dSvabridgers 
1151*8e1cb96dSvabridgers void test_expr_positive_func() {
1152*8e1cb96dSvabridgers   unsigned a = 0;
1153*8e1cb96dSvabridgers   unsigned b = 1;
1154*8e1cb96dSvabridgers   a = a > 5 ? a+func() : a+func();
1155*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:24: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1156*8e1cb96dSvabridgers }
1157*8e1cb96dSvabridgers 
1158*8e1cb96dSvabridgers void test_expr_negative_func() {
1159*8e1cb96dSvabridgers   unsigned a = 0;
1160*8e1cb96dSvabridgers   unsigned b = 1;
1161*8e1cb96dSvabridgers   a = a > 5 ? a+func() : a+func2(); // no warning
1162*8e1cb96dSvabridgers }
1163*8e1cb96dSvabridgers 
1164*8e1cb96dSvabridgers void test_expr_positive_funcParam() {
1165*8e1cb96dSvabridgers   unsigned a = 0;
1166*8e1cb96dSvabridgers   unsigned b = 1;
1167*8e1cb96dSvabridgers   a = a > 5 ? a+funcParam(b) : a+funcParam(b);
1168*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:30: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1169*8e1cb96dSvabridgers }
1170*8e1cb96dSvabridgers 
1171*8e1cb96dSvabridgers void test_expr_negative_funcParam() {
1172*8e1cb96dSvabridgers   unsigned a = 0;
1173*8e1cb96dSvabridgers   unsigned b = 1;
1174*8e1cb96dSvabridgers   a = a > 5 ? a+funcParam(a) : a+funcParam(b); // no warning
1175*8e1cb96dSvabridgers }
1176*8e1cb96dSvabridgers 
1177*8e1cb96dSvabridgers void test_expr_negative_inc() {
1178*8e1cb96dSvabridgers   unsigned a = 0;
1179*8e1cb96dSvabridgers   unsigned b = 1;
1180*8e1cb96dSvabridgers   a = a > 5 ? a++ : b++; // no warning
1181*8e1cb96dSvabridgers }
1182*8e1cb96dSvabridgers 
1183*8e1cb96dSvabridgers void test_expr_negative_assign() {
1184*8e1cb96dSvabridgers   unsigned a = 0;
1185*8e1cb96dSvabridgers   unsigned b = 1;
1186*8e1cb96dSvabridgers   a = a > 5 ? a=1 : a=2; // no warning
1187*8e1cb96dSvabridgers }
1188*8e1cb96dSvabridgers 
1189*8e1cb96dSvabridgers void test_signed_nested_expr() {
1190*8e1cb96dSvabridgers   int a = 0;
1191*8e1cb96dSvabridgers   int b = 1;
1192*8e1cb96dSvabridgers   int c = 3;
1193*8e1cb96dSvabridgers   a = a > 5 ? a+b+(c+a)*(a + b*(c+a)) : a+b+(c+a)*(a + b*(c+a));
1194*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:39: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1195*8e1cb96dSvabridgers }
1196*8e1cb96dSvabridgers 
1197*8e1cb96dSvabridgers void test_signed_nested_expr_negative() {
1198*8e1cb96dSvabridgers   int a = 0;
1199*8e1cb96dSvabridgers   int b = 1;
1200*8e1cb96dSvabridgers   int c = 3;
1201*8e1cb96dSvabridgers   a = a > 5 ? a+b+(c+a)*(a + b*(c+a)) : a+b+(c+a)*(a + b*(a+c)); // no warning
1202*8e1cb96dSvabridgers }
1203*8e1cb96dSvabridgers 
1204*8e1cb96dSvabridgers void test_signed_nested_cond_expr_negative() {
1205*8e1cb96dSvabridgers   int a = 0;
1206*8e1cb96dSvabridgers   int b = 1;
1207*8e1cb96dSvabridgers   int c = 3;
1208*8e1cb96dSvabridgers   a = a > 5 ? (b > 5 ? 1 : 4) : (b > 5 ? 2 : 4); // no warning
1209*8e1cb96dSvabridgers }
1210*8e1cb96dSvabridgers 
1211*8e1cb96dSvabridgers void test_signed_nested_cond_expr() {
1212*8e1cb96dSvabridgers   int a = 0;
1213*8e1cb96dSvabridgers   int b = 1;
1214*8e1cb96dSvabridgers   int c = 3;
1215*8e1cb96dSvabridgers   a = a > 5 ? (b > 5 ? 1 : 4) : (b > 5 ? 4 : 4);
1216*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:44: warning: 'true' and 'false' expressions are equivalent [misc-redundant-expression]
1217*8e1cb96dSvabridgers }
1218*8e1cb96dSvabridgers 
1219*8e1cb96dSvabridgers void test_identical_bitwise1() {
1220*8e1cb96dSvabridgers   int a = 5 | 5;
1221*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
1222*8e1cb96dSvabridgers }
1223*8e1cb96dSvabridgers 
1224*8e1cb96dSvabridgers void test_identical_bitwise2() {
1225*8e1cb96dSvabridgers   int a = 5;
1226*8e1cb96dSvabridgers   int b = a | a;
1227*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:13: warning: both sides of operator are equivalent [misc-redundant-expression]
1228*8e1cb96dSvabridgers }
1229*8e1cb96dSvabridgers 
1230*8e1cb96dSvabridgers void test_identical_bitwise3() {
1231*8e1cb96dSvabridgers   int a = 5;
1232*8e1cb96dSvabridgers   int b = (a | a);
1233*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:14: warning: both sides of operator are equivalent [misc-redundant-expression]
1234*8e1cb96dSvabridgers }
1235*8e1cb96dSvabridgers 
1236*8e1cb96dSvabridgers void test_identical_bitwise4() {
1237*8e1cb96dSvabridgers   int a = 4;
1238*8e1cb96dSvabridgers   int b = a | 4; // no-warning
1239*8e1cb96dSvabridgers }
1240*8e1cb96dSvabridgers 
1241*8e1cb96dSvabridgers void test_identical_bitwise5() {
1242*8e1cb96dSvabridgers   int a = 4;
1243*8e1cb96dSvabridgers   int b = 4;
1244*8e1cb96dSvabridgers   int c = a | b; // no-warning
1245*8e1cb96dSvabridgers }
1246*8e1cb96dSvabridgers 
1247*8e1cb96dSvabridgers void test_identical_bitwise6() {
1248*8e1cb96dSvabridgers   int a = 5;
1249*8e1cb96dSvabridgers   int b = a | 4 | a;
1250*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:17: warning: operator has equivalent nested operands [misc-redundant-expression]
1251*8e1cb96dSvabridgers }
1252*8e1cb96dSvabridgers 
1253*8e1cb96dSvabridgers void test_identical_bitwise7() {
1254*8e1cb96dSvabridgers   int a = 5;
1255*8e1cb96dSvabridgers   int b = func() | func();
1256*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:18: warning: both sides of operator are equivalent [misc-redundant-expression]
1257*8e1cb96dSvabridgers }
1258*8e1cb96dSvabridgers 
1259*8e1cb96dSvabridgers void test_identical_logical1(int a) {
1260*8e1cb96dSvabridgers   if (a == 4 && a == 4)
1261*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:14: warning: both sides of operator are equivalent [misc-redundant-expression]
1262*8e1cb96dSvabridgers     ;
1263*8e1cb96dSvabridgers }
1264*8e1cb96dSvabridgers 
1265*8e1cb96dSvabridgers void test_identical_logical2(int a) {
1266*8e1cb96dSvabridgers   if (a == 4 || a == 5 || a == 4)
1267*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:24: warning: operator has equivalent nested operands [misc-redundant-expression]
1268*8e1cb96dSvabridgers     ;
1269*8e1cb96dSvabridgers }
1270*8e1cb96dSvabridgers 
1271*8e1cb96dSvabridgers void test_identical_logical3(int a) {
1272*8e1cb96dSvabridgers   if (a == 4 || a == 5 || a == 6) // no-warning
1273*8e1cb96dSvabridgers     ;
1274*8e1cb96dSvabridgers }
1275*8e1cb96dSvabridgers 
1276*8e1cb96dSvabridgers void test_identical_logical4(int a) {
1277*8e1cb96dSvabridgers   if (a == func() || a == func())
1278*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:19: warning: both sides of operator are equivalent [misc-redundant-expression]
1279*8e1cb96dSvabridgers     ;
1280*8e1cb96dSvabridgers }
1281*8e1cb96dSvabridgers 
1282*8e1cb96dSvabridgers #pragma clang diagnostic push
1283*8e1cb96dSvabridgers #pragma clang diagnostic ignored "-Wlogical-op-parentheses"
1284*8e1cb96dSvabridgers void test_identical_logical5(int x, int y) {
1285*8e1cb96dSvabridgers   if (x == 4 && y == 5 || x == 4 && y == 6) // no-warning
1286*8e1cb96dSvabridgers     ;
1287*8e1cb96dSvabridgers }
1288*8e1cb96dSvabridgers 
1289*8e1cb96dSvabridgers void test_identical_logical6(int x, int y) {
1290*8e1cb96dSvabridgers   if (x == 4 && y == 5 || x == 4 && y == 5)
1291*8e1cb96dSvabridgers // CHECK-MESSAGES-IDENTEXPR: :[[@LINE-1]]:24: warning: both sides of operator are equivalent [misc-redundant-expression]
1292*8e1cb96dSvabridgers     ;
1293*8e1cb96dSvabridgers }
1294*8e1cb96dSvabridgers 
1295*8e1cb96dSvabridgers void test_identical_logical7(int x, int y) {
1296*8e1cb96dSvabridgers   // FIXME: We should warn here
1297*8e1cb96dSvabridgers   if (x == 4 && y == 5 || x == 4)
1298*8e1cb96dSvabridgers     ;
1299*8e1cb96dSvabridgers }
1300*8e1cb96dSvabridgers 
1301*8e1cb96dSvabridgers void test_identical_logical8(int x, int y) {
1302*8e1cb96dSvabridgers   // FIXME: We should warn here
1303*8e1cb96dSvabridgers   if (x == 4 || y == 5 && x == 4)
1304*8e1cb96dSvabridgers     ;
1305*8e1cb96dSvabridgers }
1306*8e1cb96dSvabridgers 
1307*8e1cb96dSvabridgers void test_identical_logical9(int x, int y) {
1308*8e1cb96dSvabridgers   // FIXME: We should warn here
1309*8e1cb96dSvabridgers   if (x == 4 || x == 4 && y == 5)
1310*8e1cb96dSvabridgers     ;
1311*8e1cb96dSvabridgers }
1312*8e1cb96dSvabridgers #pragma clang diagnostic pop
1313