/* Copyright (C) 2004 Free Software Foundation. Check that constant folding and RTL simplification of -(x >> y) doesn't break anything and produces the expected results. Written by Roger Sayle, 11th March 2004. */ extern void abort (void); #define INT_BITS (sizeof(int)*8) int test1(int x) { return -(x >> (INT_BITS-1)); } int test2(unsigned int x) { return -((int)(x >> (INT_BITS-1))); } int test3(int x) { int y; y = INT_BITS-1; return -(x >> y); } int test4(unsigned int x) { int y; y = INT_BITS-1; return -((int)(x >> y)); } int main() { if (test1(0) != 0) abort (); if (test1(1) != 0) abort (); if (test1(-1) != 1) abort (); if (test2(0) != 0) abort (); if (test2(1) != 0) abort (); if (test2((unsigned int)-1) != -1) abort (); if (test3(0) != 0) abort (); if (test3(1) != 0) abort (); if (test3(-1) != 1) abort (); if (test4(0) != 0) abort (); if (test4(1) != 0) abort (); if (test4((unsigned int)-1) != -1) abort (); return 0; }