| /* 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; | |
| } |