1! { dg-do compile }
2! { dg-additional-options "-fdump-tree-original" }
3! { dg-final { scan-tree-dump-times "omp atomic release" 1 "original" } }
4! { dg-final { scan-tree-dump-times "omp atomic seq_cst" 3 "original" } }
5! { dg-final { scan-tree-dump-times "omp atomic read seq_cst" 1 "original" } }
6! { dg-final { scan-tree-dump-times "omp atomic capture seq_cst" 1 "original" } }
7
8module mod
9implicit none
10integer i, j, k, l, m, n
11
12contains
13subroutine foo ()
14  !$omp atomic release
15  i = i + 1
16end
17end module
18
19module m2
20use mod
21implicit none
22!$omp requires atomic_default_mem_order (seq_cst)
23
24contains
25
26subroutine bar ()
27  integer v
28  !$omp atomic
29  j = j + 1
30  !$omp atomic update
31  k = k + 1
32  !$omp atomic read
33  v = l
34  !$omp atomic write
35  m = v
36  !$omp atomic capture
37  n = n + 1; v = n
38end
39end module
40