1 /* Copyright (C) 2004 Free Software Foundation. 2 3 Check that constant folding and RTL simplification of -(x >> y) doesn't 4 break anything and produces the expected results. 5 6 Written by Roger Sayle, 11th March 2004. */ 7 8 extern void abort (void); 9 10 #define INT_BITS (sizeof(int)*8) 11 test1(int x)12int test1(int x) 13 { 14 return -(x >> (INT_BITS-1)); 15 } 16 test2(unsigned int x)17int test2(unsigned int x) 18 { 19 return -((int)(x >> (INT_BITS-1))); 20 } 21 test3(int x)22int test3(int x) 23 { 24 int y; 25 y = INT_BITS-1; 26 return -(x >> y); 27 } 28 test4(unsigned int x)29int test4(unsigned int x) 30 { 31 int y; 32 y = INT_BITS-1; 33 return -((int)(x >> y)); 34 } 35 main()36int main() 37 { 38 if (test1(0) != 0) 39 abort (); 40 if (test1(1) != 0) 41 abort (); 42 if (test1(-1) != 1) 43 abort (); 44 45 if (test2(0) != 0) 46 abort (); 47 if (test2(1) != 0) 48 abort (); 49 if (test2((unsigned int)-1) != -1) 50 abort (); 51 52 if (test3(0) != 0) 53 abort (); 54 if (test3(1) != 0) 55 abort (); 56 if (test3(-1) != 1) 57 abort (); 58 59 if (test4(0) != 0) 60 abort (); 61 if (test4(1) != 0) 62 abort (); 63 if (test4((unsigned int)-1) != -1) 64 abort (); 65 66 return 0; 67 } 68 69