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