1! { dg-do run }
2  integer :: v(16), i
3  do i = 1, 16
4    v(i) = i
5  end do
6
7  !$omp parallel num_threads (4)
8    !$omp single
9      !$omp taskgroup
10	do i = 1, 16, 2
11	  !$omp task
12	    !$omp task
13	      v(i) = v(i) + 1
14	    !$omp end task
15	    !$omp task
16	      v(i + 1) = v(i + 1) + 1
17	    !$omp end task
18	  !$omp end task
19	end do
20      !$omp end taskgroup
21      do i = 1, 16
22	if (v(i).ne.(i + 1)) stop 1
23      end do
24      !$omp taskgroup
25	do i = 1, 16, 2
26	  !$omp task
27	    !$omp task
28	      v(i) = v(i) + 1
29	    !$omp endtask
30	    !$omp task
31	      v(i + 1) = v(i + 1) + 1
32	    !$omp endtask
33	    !$omp taskwait
34	  !$omp endtask
35	end do
36      !$omp endtaskgroup
37      do i = 1, 16
38	if (v(i).ne.(i + 2)) stop 2
39      end do
40      !$omp taskgroup
41	do i = 1, 16, 2
42	  !$omp task
43	    !$omp task
44	      v(i) = v(i) + 1
45	    !$omp end task
46	    v(i + 1) = v(i + 1) + 1
47	  !$omp end task
48	end do
49	!$omp taskwait
50	do i = 1, 16, 2
51	  !$omp task
52	    v(i + 1) = v(i + 1) + 1
53	  !$omp end task
54	end do
55      !$omp end taskgroup
56      do i = 1, 16, 2
57	if (v(i).ne.(i + 3)) stop 3
58	if (v(i + 1).ne.(i + 5)) stop 4
59      end do
60      !$omp taskgroup
61	do i = 1, 16, 2
62	  !$omp taskgroup
63	    !$omp task
64	      v(i) = v(i) + 1
65	    !$omp end task
66	    !$omp task
67	      v(i + 1) = v(i + 1) + 1
68	    !$omp end task
69	  !$omp end taskgroup
70	  if (v(i).ne.(i + 4).or.v(i + 1).ne.(i + 6)) stop 5
71	  !$omp task
72	    v(i) = v(i) + 1
73	  !$omp end task
74	end do
75      !$omp end taskgroup
76      do i = 1, 16
77	if (v(i).ne.(i + 5)) stop 6
78      end do
79    !$omp end single
80  !$omp end parallel
81end
82