/* PR rtl-optimization/84071 */ | |
/* Reported by Wilco <wilco@gcc.gnu.org> */ | |
extern void abort (void); | |
typedef union | |
{ | |
signed short ss; | |
unsigned short us; | |
int x; | |
} U; | |
int f(int x, int y, int z, int a, U u) __attribute__((noclone, noinline)); | |
int f(int x, int y, int z, int a, U u) | |
{ | |
return (u.ss <= 0) + u.us; | |
} | |
int main (void) | |
{ | |
U u = { .ss = -1 }; | |
if (f (0, 0, 0, 0, u) != (1 << sizeof (short) * 8)) | |
abort (); | |
return 0; | |
} |