1  /* { dg-do run { target ia32 } } */
       2  /* { dg-options "-O2 -march=i686" } */
       3  
       4  struct S { double _M_fp; };
       5  union U { double d; unsigned long long int l; };
       6  
       7  void
       8  __attribute__((noipa))
       9  foo (void)
      10  {
      11    struct S a0, a1;
      12    union U u;
      13    double d0, d1;
      14    a0._M_fp = 0.0;
      15    a1._M_fp = 1.0;
      16    __atomic_store_8 (&a0._M_fp, __atomic_load_8 (&a1._M_fp, __ATOMIC_SEQ_CST), __ATOMIC_SEQ_CST);
      17    u.l = __atomic_load_8 (&a0._M_fp, __ATOMIC_SEQ_CST);
      18    d0 = u.d;
      19    u.l = __atomic_load_8 (&a1._M_fp, __ATOMIC_SEQ_CST);
      20    d1 = u.d;
      21    if (d0 != d1)
      22      __builtin_abort ();
      23  }
      24  
      25  int
      26  main ()
      27  {
      28    foo ();
      29    return 0;
      30  }