| ! { dg-do run } |
| !$ use omp_lib |
| |
| integer :: i, j, k |
| double precision :: d |
| i = 6 |
| j = 19 |
| k = 0 |
| d = 24.5 |
| call test (i, j, k, d) |
| if (i .ne. 38) call abort |
| if (iand (k, 255) .ne. 0) call abort |
| if (iand (k, 65280) .eq. 0) then |
| if (k .ne. 65536 * 4) call abort |
| end if |
| contains |
| subroutine test (i, j, k, d) |
| integer :: i, j, k |
| double precision :: d |
| |
| !$omp parallel firstprivate (d) private (j) num_threads (4) reduction (+:k) |
| if (i .ne. 6 .or. d .ne. 24.5 .or. k .ne. 0) k = k + 1 |
| if (omp_get_num_threads () .ne. 4) k = k + 256 |
| d = d / 2 |
| j = 8 |
| k = k + 65536 |
| !$omp barrier |
| if (d .ne. 12.25 .or. j .ne. 8) k = k + 1 |
| !$omp single |
| i = i + 32 |
| !$omp end single nowait |
| !$omp end parallel |
| end subroutine test |
| end |