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 wait (0, 1)
27
28  !$acc parallel
29  !$acc loop
30  do i = 1, N
31    c(i) = a(i) + b(i)
32  end do
33  !$acc end parallel
34
35  do i = 1, N
36    if (c(i) .ne. 2.0) STOP 1
37  end do
38
39  !$acc kernels async (0)
40  !$acc loop
41  do i = 1, N
42    a(i) = 1
43  end do
44  !$acc end kernels
45
46  !$acc kernels async (1)
47  !$acc loop
48  do i = 1, N
49    b(i) = 1
50  end do
51  !$acc end kernels
52
53  !$acc wait (0, 1)
54
55  !$acc kernels
56  !$acc loop
57  do i = 1, N
58    c(i) = a(i) + b(i)
59  end do
60  !$acc end kernels
61
62  do i = 1, N
63    if (c(i) .ne. 2.0) STOP 2
64  end do
65
66  deallocate (a)
67  deallocate (b)
68  deallocate (c)
69end program asyncwait
70