modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/20020506-1.c (about) 1 /* Copyright (C) 2002 Free Software Foundation. 2 3 Test that (A & C1) op C2 optimizations behave correctly where C1 is 4 a constant power of 2, op is == or !=, and C2 is C1 or zero. 5 6 Written by Roger Sayle, 5th May 2002. */ 7 8 #include <limits.h> 9 10 extern void abort (void); 11 12 void test1 (signed char c, int set); 13 void test2 (unsigned char c, int set); 14 void test3 (short s, int set); 15 void test4 (unsigned short s, int set); 16 void test5 (int i, int set); 17 void test6 (unsigned int i, int set); 18 void test7 (long long l, int set); 19 void test8 (unsigned long long l, int set); 20 21 #ifndef LONG_LONG_MAX 22 #define LONG_LONG_MAX __LONG_LONG_MAX__ 23 #endif 24 #ifndef LONG_LONG_MIN 25 #define LONG_LONG_MIN (-LONG_LONG_MAX-1) 26 #endif 27 #ifndef ULONG_LONG_MAX 28 #define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1) 29 #endif 30 31 32 void 33 test1 (signed char c, int set) 34 { 35 if ((c & (SCHAR_MAX+1)) == 0) 36 { 37 if (set) abort (); 38 } 39 else 40 if (!set) abort (); 41 42 if ((c & (SCHAR_MAX+1)) != 0) 43 { 44 if (!set) abort (); 45 } 46 else 47 if (set) abort (); 48 49 if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1)) 50 { 51 if (!set) abort (); 52 } 53 else 54 if (set) abort (); 55 56 if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1)) 57 { 58 if (set) abort (); 59 } 60 else 61 if (!set) abort (); 62 } 63 64 void 65 test2 (unsigned char c, int set) 66 { 67 if ((c & (SCHAR_MAX+1)) == 0) 68 { 69 if (set) abort (); 70 } 71 else 72 if (!set) abort (); 73 74 if ((c & (SCHAR_MAX+1)) != 0) 75 { 76 if (!set) abort (); 77 } 78 else 79 if (set) abort (); 80 81 if ((c & (SCHAR_MAX+1)) == (SCHAR_MAX+1)) 82 { 83 if (!set) abort (); 84 } 85 else 86 if (set) abort (); 87 88 if ((c & (SCHAR_MAX+1)) != (SCHAR_MAX+1)) 89 { 90 if (set) abort (); 91 } 92 else 93 if (!set) abort (); 94 } 95 96 void 97 test3 (short s, int set) 98 { 99 if ((s & (SHRT_MAX+1)) == 0) 100 { 101 if (set) abort (); 102 } 103 else 104 if (!set) abort (); 105 106 if ((s & (SHRT_MAX+1)) != 0) 107 { 108 if (!set) abort (); 109 } 110 else 111 if (set) abort (); 112 113 if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1)) 114 { 115 if (!set) abort (); 116 } 117 else 118 if (set) abort (); 119 120 if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1)) 121 { 122 if (set) abort (); 123 } 124 else 125 if (!set) abort (); 126 } 127 128 void 129 test4 (unsigned short s, int set) 130 { 131 if ((s & (SHRT_MAX+1)) == 0) 132 { 133 if (set) abort (); 134 } 135 else 136 if (!set) abort (); 137 138 if ((s & (SHRT_MAX+1)) != 0) 139 { 140 if (!set) abort (); 141 } 142 else 143 if (set) abort (); 144 145 if ((s & (SHRT_MAX+1)) == (SHRT_MAX+1)) 146 { 147 if (!set) abort (); 148 } 149 else 150 if (set) abort (); 151 152 if ((s & (SHRT_MAX+1)) != (SHRT_MAX+1)) 153 { 154 if (set) abort (); 155 } 156 else 157 if (!set) abort (); 158 } 159 160 void 161 test5 (int i, int set) 162 { 163 if ((i & (INT_MAX+1U)) == 0) 164 { 165 if (set) abort (); 166 } 167 else 168 if (!set) abort (); 169 170 if ((i & (INT_MAX+1U)) != 0) 171 { 172 if (!set) abort (); 173 } 174 else 175 if (set) abort (); 176 177 if ((i & (INT_MAX+1U)) == (INT_MAX+1U)) 178 { 179 if (!set) abort (); 180 } 181 else 182 if (set) abort (); 183 184 if ((i & (INT_MAX+1U)) != (INT_MAX+1U)) 185 { 186 if (set) abort (); 187 } 188 else 189 if (!set) abort (); 190 } 191 192 void 193 test6 (unsigned int i, int set) 194 { 195 if ((i & (INT_MAX+1U)) == 0) 196 { 197 if (set) abort (); 198 } 199 else 200 if (!set) abort (); 201 202 if ((i & (INT_MAX+1U)) != 0) 203 { 204 if (!set) abort (); 205 } 206 else 207 if (set) abort (); 208 209 if ((i & (INT_MAX+1U)) == (INT_MAX+1U)) 210 { 211 if (!set) abort (); 212 } 213 else 214 if (set) abort (); 215 216 if ((i & (INT_MAX+1U)) != (INT_MAX+1U)) 217 { 218 if (set) abort (); 219 } 220 else 221 if (!set) abort (); 222 } 223 224 void 225 test7 (long long l, int set) 226 { 227 if ((l & (LONG_LONG_MAX+1ULL)) == 0) 228 { 229 if (set) abort (); 230 } 231 else 232 if (!set) abort (); 233 234 if ((l & (LONG_LONG_MAX+1ULL)) != 0) 235 { 236 if (!set) abort (); 237 } 238 else 239 if (set) abort (); 240 241 if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL)) 242 { 243 if (!set) abort (); 244 } 245 else 246 if (set) abort (); 247 248 if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL)) 249 { 250 if (set) abort (); 251 } 252 else 253 if (!set) abort (); 254 } 255 256 void 257 test8 (unsigned long long l, int set) 258 { 259 if ((l & (LONG_LONG_MAX+1ULL)) == 0) 260 { 261 if (set) abort (); 262 } 263 else 264 if (!set) abort (); 265 266 if ((l & (LONG_LONG_MAX+1ULL)) != 0) 267 { 268 if (!set) abort (); 269 } 270 else 271 if (set) abort (); 272 273 if ((l & (LONG_LONG_MAX+1ULL)) == (LONG_LONG_MAX+1ULL)) 274 { 275 if (!set) abort (); 276 } 277 else 278 if (set) abort (); 279 280 if ((l & (LONG_LONG_MAX+1ULL)) != (LONG_LONG_MAX+1ULL)) 281 { 282 if (set) abort (); 283 } 284 else 285 if (!set) abort (); 286 } 287 288 int 289 main () 290 { 291 test1 (0, 0); 292 test1 (SCHAR_MAX, 0); 293 test1 (SCHAR_MIN, 1); 294 test1 (UCHAR_MAX, 1); 295 296 test2 (0, 0); 297 test2 (SCHAR_MAX, 0); 298 test2 (SCHAR_MIN, 1); 299 test2 (UCHAR_MAX, 1); 300 301 test3 (0, 0); 302 test3 (SHRT_MAX, 0); 303 test3 (SHRT_MIN, 1); 304 test3 (USHRT_MAX, 1); 305 306 test4 (0, 0); 307 test4 (SHRT_MAX, 0); 308 test4 (SHRT_MIN, 1); 309 test4 (USHRT_MAX, 1); 310 311 test5 (0, 0); 312 test5 (INT_MAX, 0); 313 test5 (INT_MIN, 1); 314 test5 (UINT_MAX, 1); 315 316 test6 (0, 0); 317 test6 (INT_MAX, 0); 318 test6 (INT_MIN, 1); 319 test6 (UINT_MAX, 1); 320 321 test7 (0, 0); 322 test7 (LONG_LONG_MAX, 0); 323 test7 (LONG_LONG_MIN, 1); 324 test7 (ULONG_LONG_MAX, 1); 325 326 test8 (0, 0); 327 test8 (LONG_LONG_MAX, 0); 328 test8 (LONG_LONG_MIN, 1); 329 test8 (ULONG_LONG_MAX, 1); 330 331 return 0; 332 } 333