1  /* PR target/49244 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2 -g" } */
       4  
       5  int cnt;
       6  
       7  __attribute__((noinline, noclone)) void
       8  bar (void)
       9  {
      10    cnt++;
      11  }
      12  
      13  #include "pr49244-1.c"
      14  
      15  int a;
      16  long int b;
      17  unsigned long int c;
      18  unsigned short int d;
      19  
      20  int
      21  main ()
      22  {
      23    __atomic_store_n (&a, 15, __ATOMIC_RELAXED);
      24    if (f1 (&a, 2) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 15
      25        || f1 (&a, 4) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 31)
      26      __builtin_abort ();
      27    if (f2 (&a, 1) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 31
      28        || f2 (&a, 5) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 63)
      29      __builtin_abort ();
      30    __atomic_store_n (&b, 24, __ATOMIC_RELAXED);
      31    if (f3 (&b, 2) != 1 || __atomic_load_n (&b, __ATOMIC_RELAXED) != 28
      32        || f3 (&b, 3) != 0 || __atomic_load_n (&b, __ATOMIC_RELAXED) != 28)
      33      __builtin_abort ();
      34    __atomic_store_n (&a, 0, __ATOMIC_RELAXED);
      35    if (f4 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 128
      36        || f4 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 128)
      37      __builtin_abort ();
      38    if (f5 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8320
      39        || f5 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8320)
      40      __builtin_abort ();
      41    if (f6 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321
      42        || f6 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321)
      43      __builtin_abort ();
      44    if (cnt != 0
      45        || (f7 (&a, 7), cnt) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8193
      46        || (f7 (&a, 7), cnt) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321)
      47      __builtin_abort ();
      48    if ((f8 (&a, 7), cnt) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8193
      49        || (f8 (&a, 7), cnt) != 2 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321)
      50      __builtin_abort ();
      51    if (f9 (&a, 13) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 129
      52        || f9 (&a, 13) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321)
      53      __builtin_abort ();
      54    if (f10 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8193
      55        || f10 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321)
      56      __builtin_abort ();
      57    if (f11 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 129
      58        || f11 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321)
      59      __builtin_abort ();
      60    if (f12 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8320
      61        || f12 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8321)
      62      __builtin_abort ();
      63    if (f13 (&a, 7) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8193
      64        || f13 (&a, 7) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8193)
      65      __builtin_abort ();
      66    if (f14 (&a, 13) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 1
      67        || f14 (&a, 13) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 1)
      68      __builtin_abort ();
      69    if (f15 (&a, 0) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 0
      70        || f15 (&a, 0) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 0)
      71      __builtin_abort ();
      72    __atomic_store_n (&a, 8321, __ATOMIC_RELAXED);
      73    if (f16 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8193
      74        || f16 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 8193)
      75      __builtin_abort ();
      76    if (f17 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 1
      77        || f17 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 1)
      78      __builtin_abort ();
      79    if (f18 (&a) != 1 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 0
      80        || f18 (&a) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 0)
      81      __builtin_abort ();
      82    if (f19 (&c, 7) != 1 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 128
      83        || f19 (&c, 7) != 0 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 0)
      84      __builtin_abort ();
      85    if (f20 (&c) != 0 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 128
      86        || f20 (&c) != 1 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 0)
      87      __builtin_abort ();
      88    __atomic_store_n (&a, 128, __ATOMIC_RELAXED);
      89    if (f21 (&a, 4) != 0 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 144
      90        || f21 (&a, 4) != 16 || __atomic_load_n (&a, __ATOMIC_RELAXED) != 144)
      91      __builtin_abort ();
      92    __atomic_store_n (&c, 1, __ATOMIC_RELAXED);
      93    if (f22 (&c) != 128 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 129
      94        || f22 (&c) != 0 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 1)
      95      __builtin_abort ();
      96    if (f23 (&c) != 0 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 129
      97        || f23 (&c) != 128 || __atomic_load_n (&c, __ATOMIC_RELAXED) != 1)
      98      __builtin_abort ();
      99    if (f24 (&d) != 0 || __atomic_load_n (&d, __ATOMIC_RELAXED) != 128
     100        || f24 (&d) != 1 || __atomic_load_n (&d, __ATOMIC_RELAXED) != 128)
     101      __builtin_abort ();
     102    __atomic_store_n (&d, 1, __ATOMIC_RELAXED);
     103    if (f25 (&d) != 0 || __atomic_load_n (&d, __ATOMIC_RELAXED) != 129
     104        || f25 (&d) != 1 || __atomic_load_n (&d, __ATOMIC_RELAXED) != 129
     105        || cnt != 2)
     106      __builtin_abort ();
     107    return 0;
     108  }