1! { dg-do run } 2! { dg-options "-fbounds-check" } 3! Tests the fix for PR30003, in which the 'end' of an array section 4! would not be evaluated at all if it was on the lhs of an assignment 5! or would be evaluated many times if bound checking were on. 6! 7! Contributed by Erik Edelmann <eedelmann@gcc.gnu.org> 8! 9 implicit none 10 integer :: a(5), b(3), cnt 11 12 b = [ 1, 2, 3 ] 13! Check the lhs references 14 cnt = 0 15 a(bar(1):3) = b 16 if (cnt /= 1) call abort () 17 cnt = 0 18 a(1:bar(3)) = b 19 if (cnt /= 1) call abort () 20 cnt = 0 21 a(1:3:bar(1)) = b 22 if (cnt /= 1) call abort () 23! Check the rhs references 24 cnt = 0 25 a(1:3) = b(bar(1):3) 26 if (cnt /= 1) call abort () 27 cnt = 0 28 a(1:3) = b(1:bar(3)) 29 if (cnt /= 1) call abort () 30 cnt = 0 31 a(1:3) = b(1:3:bar(1)) 32 if (cnt /= 1) call abort () 33contains 34 integer function bar(n) 35 integer, intent(in) :: n 36 cnt = cnt + 1 37 bar = n 38 end function bar 39end 40