modernc.org/cc@v1.0.1/testdata/gcc-6.3.0/gcc/testsuite/gcc.c-torture/execute/20040409-2.c (about) 1 #include <limits.h> 2 3 extern void abort (); 4 5 int test1(int x) 6 { 7 return (x ^ INT_MIN) ^ 0x1234; 8 } 9 10 unsigned int test1u(unsigned int x) 11 { 12 return (x ^ (unsigned int)INT_MIN) ^ 0x1234; 13 } 14 15 int test2(int x) 16 { 17 return (x ^ 0x1234) ^ INT_MIN; 18 } 19 20 unsigned int test2u(unsigned int x) 21 { 22 return (x ^ 0x1234) ^ (unsigned int)INT_MIN; 23 } 24 25 int test3(int x) 26 { 27 return (x + INT_MIN) ^ 0x1234; 28 } 29 30 unsigned int test3u(unsigned int x) 31 { 32 return (x + (unsigned int)INT_MIN) ^ 0x1234; 33 } 34 35 int test4(int x) 36 { 37 return (x ^ 0x1234) + INT_MIN; 38 } 39 40 unsigned int test4u(unsigned int x) 41 { 42 return (x ^ 0x1234) + (unsigned int)INT_MIN; 43 } 44 45 int test5(int x) 46 { 47 return (x - INT_MIN) ^ 0x1234; 48 } 49 50 unsigned int test5u(unsigned int x) 51 { 52 return (x - (unsigned int)INT_MIN) ^ 0x1234; 53 } 54 55 int test6(int x) 56 { 57 return (x ^ 0x1234) - INT_MIN; 58 } 59 60 unsigned int test6u(unsigned int x) 61 { 62 return (x ^ 0x1234) - (unsigned int)INT_MIN; 63 } 64 65 int test7(int x) 66 { 67 int y = INT_MIN; 68 int z = 0x1234; 69 return (x ^ y) ^ z; 70 } 71 72 unsigned int test7u(unsigned int x) 73 { 74 unsigned int y = (unsigned int)INT_MIN; 75 unsigned int z = 0x1234; 76 return (x ^ y) ^ z; 77 } 78 79 int test8(int x) 80 { 81 int y = 0x1234; 82 int z = INT_MIN; 83 return (x ^ y) ^ z; 84 } 85 86 unsigned int test8u(unsigned int x) 87 { 88 unsigned int y = 0x1234; 89 unsigned int z = (unsigned int)INT_MIN; 90 return (x ^ y) ^ z; 91 } 92 93 int test9(int x) 94 { 95 int y = INT_MIN; 96 int z = 0x1234; 97 return (x + y) ^ z; 98 } 99 100 unsigned int test9u(unsigned int x) 101 { 102 unsigned int y = (unsigned int)INT_MIN; 103 unsigned int z = 0x1234; 104 return (x + y) ^ z; 105 } 106 107 int test10(int x) 108 { 109 int y = 0x1234; 110 int z = INT_MIN; 111 return (x ^ y) + z; 112 } 113 114 unsigned int test10u(unsigned int x) 115 { 116 unsigned int y = 0x1234; 117 unsigned int z = (unsigned int)INT_MIN; 118 return (x ^ y) + z; 119 } 120 121 int test11(int x) 122 { 123 int y = INT_MIN; 124 int z = 0x1234; 125 return (x - y) ^ z; 126 } 127 128 unsigned int test11u(unsigned int x) 129 { 130 unsigned int y = (unsigned int)INT_MIN; 131 unsigned int z = 0x1234; 132 return (x - y) ^ z; 133 } 134 135 int test12(int x) 136 { 137 int y = 0x1234; 138 int z = INT_MIN; 139 return (x ^ y) - z; 140 } 141 142 unsigned int test12u(unsigned int x) 143 { 144 unsigned int y = 0x1234; 145 unsigned int z = (unsigned int)INT_MIN; 146 return (x ^ y) - z; 147 } 148 149 150 void test(int a, int b) 151 { 152 if (test1(a) != b) 153 abort(); 154 if (test2(a) != b) 155 abort(); 156 if (test3(a) != b) 157 abort(); 158 if (test4(a) != b) 159 abort(); 160 if (test5(a) != b) 161 abort(); 162 if (test6(a) != b) 163 abort(); 164 if (test7(a) != b) 165 abort(); 166 if (test8(a) != b) 167 abort(); 168 if (test9(a) != b) 169 abort(); 170 if (test10(a) != b) 171 abort(); 172 if (test11(a) != b) 173 abort(); 174 if (test12(a) != b) 175 abort(); 176 } 177 178 void testu(unsigned int a, unsigned int b) 179 { 180 if (test1u(a) != b) 181 abort(); 182 if (test2u(a) != b) 183 abort(); 184 if (test3u(a) != b) 185 abort(); 186 if (test4u(a) != b) 187 abort(); 188 if (test5u(a) != b) 189 abort(); 190 if (test6u(a) != b) 191 abort(); 192 if (test7u(a) != b) 193 abort(); 194 if (test8u(a) != b) 195 abort(); 196 if (test9u(a) != b) 197 abort(); 198 if (test10u(a) != b) 199 abort(); 200 if (test11u(a) != b) 201 abort(); 202 if (test12u(a) != b) 203 abort(); 204 } 205 206 207 int main() 208 { 209 #if INT_MAX == 2147483647 210 test(0x00000000,0x80001234); 211 test(0x00001234,0x80000000); 212 test(0x80000000,0x00001234); 213 test(0x80001234,0x00000000); 214 test(0x7fffffff,0xffffedcb); 215 test(0xffffffff,0x7fffedcb); 216 217 testu(0x00000000,0x80001234); 218 testu(0x00001234,0x80000000); 219 testu(0x80000000,0x00001234); 220 testu(0x80001234,0x00000000); 221 testu(0x7fffffff,0xffffedcb); 222 testu(0xffffffff,0x7fffedcb); 223 #endif 224 225 #if INT_MAX == 32767 226 test(0x0000,0x9234); 227 test(0x1234,0x8000); 228 test(0x8000,0x1234); 229 test(0x9234,0x0000); 230 test(0x7fff,0xedcb); 231 test(0xffff,0x6dcb); 232 233 testu(0x0000,0x9234); 234 testu(0x8000,0x1234); 235 testu(0x1234,0x8000); 236 testu(0x9234,0x0000); 237 testu(0x7fff,0xedcb); 238 testu(0xffff,0x6dcb); 239 #endif 240 241 return 0; 242 } 243