| /* { dg-do run { target i?86-*-* x86_64-*-* } } */ |
| /* { dg-options "-O -fgcse -fno-split-wide-types" } */ |
| |
| extern void abort(void); |
| |
| typedef unsigned short int uint16_t; |
| typedef unsigned int uint32_t; |
| typedef unsigned long long uint64_t; |
| |
| typedef struct |
| { |
| uint16_t thread; |
| uint16_t phase; |
| } s32; |
| |
| typedef union |
| { |
| uint32_t i; |
| s32 s; |
| } u32; |
| |
| typedef union |
| { |
| uint64_t i; |
| u32 u; |
| } u64; |
| |
| static __attribute__((noinline)) |
| void foo(int val) |
| { |
| u64 data; |
| uint32_t thread; |
| |
| data.u.i = 0x10000L; |
| thread = data.u.s.thread; |
| if (val) |
| abort (); |
| if (thread) |
| abort (); |
| } |
| |
| int main(void) |
| { |
| foo (0); |
| return 0; |
| } |