constant-folding.c revision 892697dd2287caf7c29aaaa82909b0e90b8b63fe
1// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-experimental-checks -verify %s 2// XFAIL: * 3 4// Trigger a warning if the analyzer reaches this point in the control flow. 5#define WARN ((void)*(char*)0) 6 7// There should be no warnings unless otherwise indicated. 8 9void testComparisons (int a) { 10 // Sema can already catch the simple comparison a==a, 11 // since that's usually a logic error (and not path-dependent). 12 int b = a; 13 if (!(b==a)) WARN; // expected-warning{{never executed}} 14 if (!(b>=a)) WARN; // expected-warning{{never executed}} 15 if (!(b<=a)) WARN; // expected-warning{{never executed}} 16 if (b!=a) WARN; // expected-warning{{never executed}} 17 if (b>a) WARN; // expected-warning{{never executed}} 18 if (b<a) WARN; // expected-warning{{never executed}} 19} 20 21void testSelfOperations (int a) { 22 if ((a|a) != a) WARN; // expected-warning{{never executed}} 23 if ((a&a) != a) WARN; // expected-warning{{never executed}} 24 if ((a^a) != 0) WARN; // expected-warning{{never executed}} 25 if ((a-a) != 0) WARN; // expected-warning{{never executed}} 26} 27 28void testIdempotent (int a) { 29 if ((a*1) != a) WARN; // expected-warning{{never executed}} 30 if ((a/1) != a) WARN; // expected-warning{{never executed}} 31 if ((a+0) != a) WARN; // expected-warning{{never executed}} 32 if ((a-0) != a) WARN; // expected-warning{{never executed}} 33 if ((a<<0) != a) WARN; // expected-warning{{never executed}} 34 if ((a>>0) != a) WARN; // expected-warning{{never executed}} 35 if ((a^0) != a) WARN; // expected-warning{{never executed}} 36 if ((a&(~0)) != a) WARN; // expected-warning{{never executed}} 37 if ((a|0) != a) WARN; // expected-warning{{never executed}} 38} 39 40void testReductionToConstant (int a) { 41 if ((a*0) != 0) WARN; // expected-warning{{never executed}} 42 if ((a&0) != 0) WARN; // expected-warning{{never executed}} 43 if ((a|(~0)) != (~0)) WARN; // expected-warning{{never executed}} 44} 45 46void testSymmetricIntSymOperations (int a) { 47 if ((2+a) != (a+2)) WARN; // expected-warning{{never executed}} 48 if ((2*a) != (a*2)) WARN; // expected-warning{{never executed}} 49 if ((2&a) != (a&2)) WARN; // expected-warning{{never executed}} 50 if ((2^a) != (a^2)) WARN; // expected-warning{{never executed}} 51 if ((2|a) != (a|2)) WARN; // expected-warning{{never executed}} 52} 53 54void testAsymmetricIntSymOperations (int a) { 55 if (((~0) >> a) != (~0)) WARN; // expected-warning{{never executed}} 56 if ((0 >> a) != 0) WARN; // expected-warning{{never executed}} 57 if ((0 << a) != 0) WARN; // expected-warning{{never executed}} 58 59 // Unsigned right shift shifts in zeroes. 60 if ((((unsigned)(~0)) >> ((unsigned) a)) != ((unsigned)(~0))) 61 WARN; // expected-warning{{}} 62} 63 64void testLocations (char *a) { 65 char *b = a; 66 if (!(b==a)) WARN; // expected-warning{{never executed}} 67 if (!(b>=a)) WARN; // expected-warning{{never executed}} 68 if (!(b<=a)) WARN; // expected-warning{{never executed}} 69 if (b!=a) WARN; // expected-warning{{never executed}} 70 if (b>a) WARN; // expected-warning{{never executed}} 71 if (b<a) WARN; // expected-warning{{never executed}} 72 if (b-a) WARN; // expected-warning{{never executed}} 73} 74