| /* { dg-do run { target ia32 } } */ |
| /* { dg-options "-O2 -march=i686" } */ |
| |
| struct S { double _M_fp; }; |
| union U { double d; unsigned long long int l; }; |
| |
| void |
| __attribute__((noipa)) |
| foo (void) |
| { |
| struct S a0, a1; |
| union U u; |
| double d0, d1; |
| a0._M_fp = 0.0; |
| a1._M_fp = 1.0; |
| __atomic_store_8 (&a0._M_fp, __atomic_load_8 (&a1._M_fp, __ATOMIC_SEQ_CST), __ATOMIC_SEQ_CST); |
| u.l = __atomic_load_8 (&a0._M_fp, __ATOMIC_SEQ_CST); |
| d0 = u.d; |
| u.l = __atomic_load_8 (&a1._M_fp, __ATOMIC_SEQ_CST); |
| d1 = u.d; |
| if (d0 != d1) |
| __builtin_abort (); |
| } |
| |
| int |
| main () |
| { |
| foo (); |
| return 0; |
| } |