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