1 int simple(int s, unsigned int u, int p) 2 { 3 s = s >> 100; 4 u = u >> 101; 5 u = u << 102; 6 s = s >> -1; 7 u = u >> -2; 8 u = u << -3; 9 if (0) return s >> 103; 10 if (0) return u >> 104; 11 if (0) return u << 105; 12 if (0) return s >> -4; 13 if (0) return u >> -5; 14 if (0) return u << -6; 15 if (p && 0) return s >> 106; 16 if (p && 0) return u >> 107; 17 if (p && 0) return u << 108; 18 if (p && 0) return s >> -7; 19 if (p && 0) return u >> -8; 20 if (p && 0) return u << -9; 21 s = s >> ((p & 0) + 109); u ^= p; // reloaded because now == 0 22 u = u >> ((p & 0) + 110); u ^= p; // reloaded because now == 0 23 u = u << ((p & 0) + 111); u ^= p; // reloaded because now == 0 24 s = s >> ((p & 0) + -10); 25 u = u >> ((p & 0) + -11); u ^= p; // reloaded because now == 0 26 u = u << ((p & 0) + -12); u ^= p; // reloaded because now == 0 27 return s + u; 28 } 29 30 int compound(int s, unsigned int u, int p) 31 { 32 s >>= 100; 33 u >>= 101; 34 u <<= 102; 35 s >>= -1; 36 u >>= -2; 37 u <<= -3; 38 if (0) return s >>= 103; 39 if (0) return u >>= 104; 40 if (0) return u <<= 105; 41 if (0) return s >>= -4; 42 if (0) return u >>= -5; 43 if (0) return u <<= -6; 44 if (p && 0) return s >>= 106; 45 if (p && 0) return u >>= 107; 46 if (p && 0) return u <<= 108; 47 if (p && 0) return s >>= -7; 48 if (p && 0) return u >>= -8; 49 if (p && 0) return u <<= -9; 50 s >>= ((p & 0) + 109); u ^= p; // reloaded because now == 0 51 u >>= ((p & 0) + 110); u ^= p; // reloaded because now == 0 52 u <<= ((p & 0) + 111); u ^= p; // reloaded because now == 0 53 s >>= ((p & 0) + -10); 54 u >>= ((p & 0) + -11); u ^= p; // reloaded because now == 0 55 u <<= ((p & 0) + -12); u ^= p; // reloaded because now == 0 56 return s + u; 57 } 58 59 int ok(int s, unsigned int u, int p) 60 { 61 // GCC doesn't warn on these 62 if (0 && (s >> 100)) return 0; 63 if (0 && (u >> 101)) return 0; 64 if (0 && (u << 102)) return 0; 65 if (0 && (s >> -1)) return 0; 66 if (0 && (u >> -2)) return 0; 67 if (0 && (u << -3)) return 0; 68 if (0 && (s >>= 103)) return 0; 69 if (0 && (u >>= 104)) return 0; 70 if (0 && (u <<= 105)) return 0; 71 if (0 && (s >>= -4)) return 0; 72 if (0 && (u >>= -5)) return 0; 73 if (0 && (u <<= -6)) return 0; 74 return 1; 75 } 76 77 struct bf { 78 unsigned int u:8; 79 int s:8; 80 }; 81 82 int bf(struct bf *p) 83 { 84 unsigned int r = 0; 85 r += p->s << 8; 86 r += p->s >> 8; 87 r += p->u >> 8; 88 return r; 89 } 90 91 /* 92 * The following is used in the kernel at several places 93 * It shouldn't emit any warnings. 94 */ 95 typedef unsigned long long u64; 96 typedef unsigned int u32; 97 98 extern void hw_w32x2(u32 hi, u32 lo); 99 100 inline void hw_w64(u64 val) 101 { 102 hw_w32x2(val >> 32, (u32) val); 103 } 104 105 void hw_write(u32 val) 106 { 107 hw_w64(val); 108 } 109 110 /* 111 * check-name: shift too big or negative 112 * check-command: sparse -Wno-decl $file 113 * 114 * check-error-start 115 shift-undef.c:3:15: warning: shift too big (100) for type int 116 shift-undef.c:4:15: warning: shift too big (101) for type unsigned int 117 shift-undef.c:5:15: warning: shift too big (102) for type unsigned int 118 shift-undef.c:6:15: warning: shift count is negative (-1) 119 shift-undef.c:7:15: warning: shift count is negative (-2) 120 shift-undef.c:8:15: warning: shift count is negative (-3) 121 shift-undef.c:9:25: warning: shift too big (103) for type int 122 shift-undef.c:10:25: warning: shift too big (104) for type unsigned int 123 shift-undef.c:11:25: warning: shift too big (105) for type unsigned int 124 shift-undef.c:12:25: warning: shift count is negative (-4) 125 shift-undef.c:13:25: warning: shift count is negative (-5) 126 shift-undef.c:14:25: warning: shift count is negative (-6) 127 shift-undef.c:15:30: warning: shift too big (106) for type int 128 shift-undef.c:16:30: warning: shift too big (107) for type unsigned int 129 shift-undef.c:17:30: warning: shift too big (108) for type unsigned int 130 shift-undef.c:18:30: warning: shift count is negative (-7) 131 shift-undef.c:19:30: warning: shift count is negative (-8) 132 shift-undef.c:20:30: warning: shift count is negative (-9) 133 shift-undef.c:21:29: warning: shift too big (109) for type int 134 shift-undef.c:22:29: warning: shift too big (110) for type unsigned int 135 shift-undef.c:23:29: warning: shift too big (111) for type unsigned int 136 shift-undef.c:24:29: warning: shift count is negative (-10) 137 shift-undef.c:25:29: warning: shift count is negative (-11) 138 shift-undef.c:26:29: warning: shift count is negative (-12) 139 shift-undef.c:32:11: warning: shift too big (100) for type int 140 shift-undef.c:33:11: warning: shift too big (101) for type unsigned int 141 shift-undef.c:34:11: warning: shift too big (102) for type unsigned int 142 shift-undef.c:35:11: warning: shift count is negative (-1) 143 shift-undef.c:36:11: warning: shift count is negative (-2) 144 shift-undef.c:37:11: warning: shift count is negative (-3) 145 shift-undef.c:38:25: warning: shift too big (103) for type int 146 shift-undef.c:39:25: warning: shift too big (104) for type unsigned int 147 shift-undef.c:40:25: warning: shift too big (105) for type unsigned int 148 shift-undef.c:41:25: warning: shift count is negative (-4) 149 shift-undef.c:42:25: warning: shift count is negative (-5) 150 shift-undef.c:43:25: warning: shift count is negative (-6) 151 shift-undef.c:44:30: warning: shift too big (106) for type int 152 shift-undef.c:45:30: warning: shift too big (107) for type unsigned int 153 shift-undef.c:46:30: warning: shift too big (108) for type unsigned int 154 shift-undef.c:47:30: warning: shift count is negative (-7) 155 shift-undef.c:48:30: warning: shift count is negative (-8) 156 shift-undef.c:49:30: warning: shift count is negative (-9) 157 shift-undef.c:50:26: warning: shift too big (109) for type int 158 shift-undef.c:51:26: warning: shift too big (110) for type int 159 shift-undef.c:52:26: warning: shift too big (111) for type int 160 shift-undef.c:53:26: warning: shift count is negative (-10) 161 shift-undef.c:54:26: warning: shift count is negative (-11) 162 shift-undef.c:55:26: warning: shift count is negative (-12) 163 * check-error-end 164 */