| module m |
| implicit none (external, type) |
| integer :: r, r2, r3 |
| contains |
| |
| subroutine foo |
| integer :: i, j, k |
| i = 0; j = 0; k = 0 |
| !$omp scope private (i) reduction (+:r) |
| i = 1 |
| r = r + 1 |
| !$omp end scope nowait |
| |
| !$omp scope private (i) reduction (task, +:r) |
| !$omp scope private (j) reduction (task, +:r2) |
| !$omp scope private (k) reduction (task, +:r3) |
| i = 1 |
| j = 2 |
| k = 3 |
| r = r + 1 |
| r2 = r2 + 1 |
| r3 = r3 + 1 |
| !$omp end scope |
| !$omp end scope |
| !$omp end scope |
| !$omp parallel |
| !$omp scope reduction (+:r) private (i) |
| !$omp scope reduction (+:r2) private (j) |
| !$omp single |
| i = 1 |
| j = 2 |
| r = r + 1 |
| r2 = r2 + 1 |
| !$omp end single |
| !$omp end scope nowait |
| !$omp end scope nowait |
| !$omp end parallel |
| end |
| end module |