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