1! { dg-do run }
2  real, dimension (20) :: r
3  integer, dimension (20) :: d
4  integer :: i, j, k, n
5  integer (kind = 2) :: a, b, c
6
7  do 10 i = 1, 20
8    r(i) = i
910  d(i) = 21 - i
10
11  n = 20
12  call foo (r, d, n)
13
14  if (n .ne. 22) call abort
15  if (any (r .ne. 33)) call abort
16
17  i = 1
18  j = 18
19  k = 23
20!$omp atomic
21  i = min (i, j, k, n)
22  if (i .ne. 1) call abort
23!$omp atomic
24  i = max (j, n, k, i)
25  if (i .ne. 23) call abort
26
27  a = 1
28  b = 18
29  c = 23
30!$omp atomic
31  a = min (a, b, c)
32  if (a .ne. 1) call abort
33!$omp atomic
34  a = max (a, b, c)
35  if (a .ne. 23) call abort
36
37contains
38  function bar (i)
39    real bar
40    integer i
41    bar = 12.0 + i
42  end function bar
43
44  subroutine foo (x, y, n)
45    integer i, y (*), n
46    real x (*)
47    do i = 1, n
48!$omp atomic
49      x(y(i)) = x(y(i)) + bar (i)
50    end do
51!$omp atomic
52    n = n + 2
53  end subroutine foo
54end
55