1  /* { dg-do compile } */
       2  /* { dg-additional-options "-fdump-tree-original" } */
       3  
       4  #pragma omp requires atomic_default_mem_order(acq_rel)
       5  
       6  void
       7  foo ()
       8  {
       9    int i, v;
      10  
      11  #pragma omp atomic read
      12    i = v;
      13  
      14  #pragma acc atomic read
      15    i = v;
      16  
      17  #pragma omp atomic write
      18    i = v;
      19  
      20  #pragma acc atomic write
      21    i = v;
      22  
      23  #pragma omp atomic update
      24    i += 1;
      25  
      26  #pragma acc atomic update
      27    i += 1;
      28  
      29  #pragma omp atomic capture
      30    v = i += 1;
      31  
      32  #pragma acc atomic capture
      33    v = i += 1;
      34  #pragma acc atomic update capture
      35    v = i += 1;
      36  }
      37  
      38  /* { dg-final { scan-tree-dump-times "i = #pragma omp atomic read acquire" 1 "original" } } */
      39  /* { dg-final { scan-tree-dump-times "i = #pragma omp atomic read relaxed" 1 "original" } } */
      40  /* { dg-final { scan-tree-dump-times "#pragma omp atomic acq_rel" 1 "original" } } */
      41  /* { dg-final { scan-tree-dump-times "#pragma omp atomic release" 1 "original" } } */
      42  /* { dg-final { scan-tree-dump-times "#pragma omp atomic relaxed" 2 "original" } } */
      43  /* { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture acq_rel" 1  "original" } } */
      44  /* { dg-final { scan-tree-dump-times "v = #pragma omp atomic capture relaxed" 2 "original" } } */