where19.f90   [plain text]


! Check to ensure result is calculated from unmodified
! version of the right-hand-side in WHERE statements.
program where_19
   integer :: a(4)
   integer :: b(3)
   integer :: c(3)
   equivalence (a(1), b(1)), (a(2), c(1))

   a = (/1, 2, 3, 4/)
   where (b .gt. 1)
     c = b
   endwhere
   if (any (a .ne. (/1, 2, 2, 3/))) &
     call abort ()

   a = (/1, 2, 3, 4/)
   where (c .gt. 1)
     b = c
   endwhere
   if (any (a .ne. (/2, 3, 4, 4/))) &
     call abort ()
end program