1f1 (unsigned int x, unsigned int y) 2{ 3 if (x == 0) 4 dummy (); 5 x -= y; 6 /* 0xfffffff2 < 0x80000000? */ 7 if (x < ~(~(unsigned int) 0 >> 1)) 8 abort (); 9 return x; 10} 11 12f2 (unsigned long int x, unsigned long int y) 13{ 14 if (x == 0) 15 dummy (); 16 x -= y; 17 /* 0xfffffff2 < 0x80000000? */ 18 if (x < ~(~(unsigned long int) 0 >> 1)) 19 abort (); 20 return x; 21} 22 23 24dummy () {} 25 26main () 27{ 28 /* 0x7ffffff3 0x80000001 */ 29 f1 ((~(unsigned int) 0 >> 1) - 12, ~(~(unsigned int) 0 >> 1) + 1); 30 f2 ((~(unsigned long int) 0 >> 1) - 12, ~(~(unsigned long int) 0 >> 1) + 1); 31 exit (0); 32} 33