1/* { dg-do run { target { { i?86-*-linux* x86_64-*-linux* } && ilp32 } } } */ 2/* { dg-options "-Os" } */ 3/* PR target/36613 */ 4 5extern void abort (void); 6 7static inline int 8lshifts (int val, int cnt) 9{ 10 if (val < 0) 11 return val; 12 return val << cnt; 13} 14 15static inline unsigned int 16lshiftu (unsigned int val, unsigned int cnt) 17{ 18 if (cnt >= sizeof (unsigned int) * __CHAR_BIT__ 19 || val > ((__INT_MAX__ * 2U) >> cnt)) 20 return val; 21 return val << cnt; 22} 23 24static inline int 25rshifts (int val, unsigned int cnt) 26{ 27 if (val < 0 || cnt >= sizeof (int) * __CHAR_BIT__) 28 return val; 29 return val >> cnt; 30} 31 32int 33foo (unsigned int val) 34{ 35 return rshifts (1 + val, lshifts (lshiftu (val, val), 1)); 36} 37 38int 39main (void) 40{ 41 if (foo (1) != 0) 42 abort (); 43 return 0; 44} 45