! { dg-do compile } ! { dg-options "-Ofast" } module m implicit none private save integer, parameter, public :: & ii4 = selected_int_kind(6), & rr8 = selected_real_kind(13) integer (ii4), dimension(40,40,199), public :: xyz public :: foo contains subroutine foo(a) real (rr8), dimension(40,40), intent(out) :: a real (rr8), dimension(40,40) :: b integer (ii4), dimension(40,40) :: c integer i, j j = 10 do i=11,30 b(i,j) = 123 * a(i,j) + 34 * a(i,j+1) & + 34 * a(i,j-1) + a(i+1,j+1) & + a(i+1,j-1) + a(i-1,j+1) & + a(i-1,j-1) c(i,j) = 123 end do where ((xyz(:,:,2) /= 0) .and. (c /= 0)) a = b/real(c) elsewhere a = 456 endwhere end subroutine foo end module m