| ! { dg-do run } |
| !$ use omp_lib |
| |
| integer (kind = 4) :: i, ia (6), j, ja (6), k, ka (6), ta (6), n, cnt, x |
| logical :: v |
| |
| i = Z'ffff0f' |
| ia = Z'f0ff0f' |
| j = Z'0f0000' |
| ja = Z'0f5a00' |
| k = Z'055aa0' |
| ka = Z'05a5a5' |
| v = .false. |
| cnt = -1 |
| x = not(0) |
| |
| !$omp parallel num_threads (3) private (n) reduction (.or.:v) & |
| !$omp & reduction (iand:i, ia) reduction (ior:j, ja) reduction (ieor:k, ka) |
| !$ if (i .ne. x .or. any (ia .ne. x)) v = .true. |
| !$ if (j .ne. 0 .or. any (ja .ne. 0)) v = .true. |
| !$ if (k .ne. 0 .or. any (ka .ne. 0)) v = .true. |
| n = omp_get_thread_num () |
| if (n .eq. 0) then |
| cnt = omp_get_num_threads () |
| i = Z'ff7fff' |
| ia(3:5) = Z'fffff1' |
| j = Z'078000' |
| ja(1:3) = 1 |
| k = Z'78' |
| ka(3:6) = Z'f0f' |
| else if (n .eq. 1) then |
| i = Z'ffff77' |
| ia(2:5) = Z'ffafff' |
| j = Z'007800' |
| ja(2:5) = 8 |
| k = Z'57' |
| ka(3:4) = Z'f0108' |
| else |
| i = Z'777fff' |
| ia(1:2) = Z'fffff3' |
| j = Z'000780' |
| ja(5:6) = Z'f00' |
| k = Z'1000' |
| ka(6:6) = Z'777' |
| end if |
| !$omp end parallel |
| if (v) call abort |
| if (cnt .eq. 3) then |
| ta = (/Z'f0ff03', Z'f0af03', Z'f0af01', Z'f0af01', Z'f0af01', Z'f0ff0f'/) |
| if (i .ne. Z'777f07' .or. any (ia .ne. ta)) call abort |
| ta = (/Z'f5a01', Z'f5a09', Z'f5a09', Z'f5a08', Z'f5f08', Z'f5f00'/) |
| if (j .ne. Z'fff80' .or. any (ja .ne. ta)) call abort |
| ta = (/Z'5a5a5', Z'5a5a5', Z'aaba2', Z'aaba2', Z'5aaaa', Z'5addd'/) |
| if (k .ne. Z'54a8f' .or. any (ka .ne. ta)) call abort |
| end if |
| end |