1 /* { dg-do run } */ 2 /* { dg-options "-O" } */ 3 4 extern void link_error (void); 5 unsigned int __attribute__((noinline,noclone)) test0(unsigned int a)6test0 (unsigned int a) 7 { 8 a = a & 1; 9 a = a << 1 | a >> (sizeof (unsigned int) * 8 - 1); 10 if (a & 1) 11 { 12 a = a | 4; 13 link_error (); 14 } 15 if (a & 4) 16 link_error (); 17 return a; 18 } 19 int __attribute__((noinline,noclone)) test1(int a)20test1 (int a) 21 { 22 a |= 1; 23 a = a << (sizeof (int) * 8 - 1); 24 if (a >= 0) 25 link_error (); 26 a = a * 4; 27 if (a & ~3) 28 link_error (); 29 if (a == -1) 30 link_error (); 31 return a; 32 } 33 int __attribute__((noinline,noclone)) test2(int a)34test2 (int a) 35 { 36 a = a | 0xff; 37 a = a + 1; 38 if (a & 0xff) 39 link_error (); 40 a = -a; 41 if (a & 0xff) 42 link_error (); 43 a = a - 1; 44 if ((a & 0xff) != 0xff) 45 link_error (); 46 return a; 47 } 48 extern void abort (void); main()49int main() 50 { 51 if (test0 (1) != 2) 52 abort (); 53 if (test1 (0) != 0) 54 abort (); 55 if (test2 (-1) != -1) 56 abort (); 57 return 0; 58 } 59