| ! Program to test WHERE inside FORALL and the WHERE assignment need temporary | |
| program where_6 | |
| integer :: A(5,5) | |
| A(1,:) = (/1,0,0,0,0/) | |
| A(2,:) = (/2,1,1,1,0/) | |
| A(3,:) = (/1,2,2,0,2/) | |
| A(4,:) = (/2,1,0,2,3/) | |
| A(5,:) = (/1,0,0,0,0/) | |
| ! Where inside FORALL. | |
| ! WHERE masks must be evaluated before executing the assignments | |
| m=5 | |
| forall (I=1:4) | |
| where (A(I,:) .EQ. 0) | |
| A(1:m,I) = A(1:m,I+1) + I | |
| elsewhere (A(I,:) >2) | |
| A(I,1:m) = 6 | |
| endwhere | |
| end forall | |
| if (any (A .ne. reshape ((/1,2,6,2,1,0,1,2,1,2,0,1,2,5,0,0,1,6,2,0,0,0,2,& | |
| 6,0/), (/5, 5/)))) call abort | |
| end |