| ! Test the dependency checking in simple where. This |
| ! did not work and was fixed as part of the patch for |
| ! pr24519. |
| ! |
| program where_20 |
| integer :: a(4) |
| integer :: b(3) |
| integer :: c(3) |
| integer :: d(3) = (/1, 2, 3/) |
| equivalence (a(1), b(1)), (a(2), c(1)) |
| |
| ! This classic case worked before the patch. |
| a = (/1, 2, 3, 4/) |
| where (b .gt. 1) a(2:4) = a(1:3) |
| if (any(a .ne. (/1,2,2,3/))) call abort () |
| |
| ! This is the original manifestation of the problem |
| ! and is repeated in where_19.f90. |
| a = (/1, 2, 3, 4/) |
| where (b .gt. 1) |
| c = b |
| endwhere |
| if (any(a .ne. (/1,2,2,3/))) call abort () |
| |
| ! Mask to.destination dependency. |
| a = (/1, 2, 3, 4/) |
| where (b .gt. 1) |
| c = d |
| endwhere |
| if (any(a .ne. (/1,2,2,3/))) call abort () |
| |
| ! Source to.destination dependency. |
| a = (/1, 2, 3, 4/) |
| where (d .gt. 1) |
| c = b |
| endwhere |
| if (any(a .ne. (/1,2,2,3/))) call abort () |
| |
| ! Check the simple where. |
| a = (/1, 2, 3, 4/) |
| where (b .gt. 1) c = b |
| if (any(a .ne. (/1,2,2,3/))) call abort () |
| |
| ! This was OK before the patch. |
| a = (/1, 2, 3, 4/) |
| where (b .gt. 1) |
| where (d .gt. 1) |
| c = b |
| end where |
| endwhere |
| if (any(a .ne. (/1,2,2,3/))) call abort () |
| |
| end program |
| |