! { dg-do run } ! { dg-options "-fbounds-check" } ! Tests the fix for PR30003, in which the 'end' of an array section ! would not be evaluated at all if it was on the lhs of an assignment ! or would be evaluated many times if bound checking were on. ! ! Contributed by Erik Edelmann ! implicit none integer :: a(5), b(3), cnt b = [ 1, 2, 3 ] ! Check the lhs references cnt = 0 a(bar(1):3) = b if (cnt /= 1) STOP 1 cnt = 0 a(1:bar(3)) = b if (cnt /= 1) STOP 2 cnt = 0 a(1:3:bar(1)) = b if (cnt /= 1) STOP 3 ! Check the rhs references cnt = 0 a(1:3) = b(bar(1):3) if (cnt /= 1) STOP 4 cnt = 0 a(1:3) = b(1:bar(3)) if (cnt /= 1) STOP 5 cnt = 0 a(1:3) = b(1:3:bar(1)) if (cnt /= 1) STOP 6 contains integer function bar(n) integer, intent(in) :: n cnt = cnt + 1 bar = n end function bar end