1program main
2  implicit none (type, external)
3  integer :: r, r2, i
4  integer a(0:63)
5  a = 0
6  r = 0; r2 = 0
7  !$omp parallel
8    !$omp scope
9      !$omp scope
10        !$omp do
11          do i = 0, 63
12            a(i) = a(i) + 1
13          end do
14        !$omp end do
15      !$omp end scope nowait
16    !$omp end scope nowait
17
18    !$omp scope reduction(+: r)
19      !$omp do
20        do i = 0, 63
21          r = r + i
22          if (a(i) /= 1) &
23            stop 1
24        end do
25      !$omp end do nowait
26      !$omp barrier
27    !$omp end scope nowait
28
29    !$omp barrier
30
31    if (r /= 64 * 63 / 2) &
32      stop 2
33
34    !$omp scope private (i)
35      !$omp scope reduction(+: r2)
36        !$omp do
37          do i = 0, 63
38            r2 = r2 + 2 * i
39            a(i) = a(i) + i
40          end do
41        !$omp end do nowait
42      !$omp end scope
43    !$omp end scope nowait
44
45    if (r2 /= 64 * 63) &
46      stop 3
47
48    !$omp do
49      do i = 0, 63
50        if (a(i) /= i + 1) &
51          stop 4
52      end do
53    !$omp end do nowait
54  !$omp end parallel
55end
56