1! { dg-do run }
2
3program asyncwait
4  integer, parameter :: N = 64
5  real, allocatable :: a(:), b(:), c(:)
6  integer i
7
8  allocate (a(N))
9  allocate (b(N))
10  allocate (c(N))
11
12  !$acc parallel async (0)
13  !$acc loop
14  do i = 1, N
15    a(i) = 1
16  end do
17  !$acc end parallel
18
19  !$acc parallel async (1)
20  !$acc loop
21  do i = 1, N
22    b(i) = 1
23  end do
24  !$acc end parallel
25
26  !$acc parallel wait (0, 1)
27  !$acc loop
28  do i = 1, N
29    c(i) = a(i) + b(i)
30  end do
31  !$acc end parallel
32
33  do i = 1, N
34    if (c(i) .ne. 2.0) STOP 1
35  end do
36
37  !$acc kernels async (0)
38  !$acc loop
39  do i = 1, N
40    a(i) = 1
41  end do
42  !$acc end kernels
43
44  !$acc kernels async (1)
45  !$acc loop
46  do i = 1, N
47    b(i) = 1
48  end do
49  !$acc end kernels
50
51  !$acc kernels wait (0, 1)
52  !$acc loop
53  do i = 1, N
54    c(i) = a(i) + b(i)
55  end do
56  !$acc end kernels
57
58  do i = 1, N
59    if (c(i) .ne. 2.0) STOP 2
60  end do
61
62  deallocate (a)
63  deallocate (b)
64  deallocate (c)
65end program asyncwait
66