1! { dg-do compile } 2! Tests the fix for PR25072, in which non-PURE functions could 3! be referenced inside a FORALL mask. 4! 5! Contributed by Paul Thomas <pault@gcc.gnu.org> 6! 7module foo 8 integer, parameter :: n = 4 9contains 10 logical function foot (i) 11 integer, intent(in) :: i 12 foot = (i == 2) .or. (i == 3) 13 end function foot 14end module foo 15 16 use foo 17 integer :: i, a(n) 18 logical :: s(n) 19 20 a = 0 21 forall (i=1:n, foot (i)) a(i) = i ! { dg-error "impure" } 22 if (any (a .ne. (/0,2,3,0/))) call abort () 23 24 forall (i=1:n, s (i) .or. t(i)) a(i) = i ! { dg-error "impure|LOGICAL" } 25 if (any (a .ne. (/0,3,2,1/))) call abort () 26 27 a = 0 28 forall (i=1:n, mod (i, 2) == 0) a(i) = w (i) ! { dg-error "impure" } 29 if (any (a .ne. (/0,2,0,4/))) call abort () 30 31contains 32 logical function t(i) 33 integer, intent(in) :: i 34 t = (mod (i, 2) == 0) 35 end function t 36 integer function w(i) 37 integer, intent(in) :: i 38 w = 5 - i 39 end function w 40end 41