2 ! { dg-options "-std=f2008 -fall-intrinsics" }
5 ! Check that IMPURE and IMPURE ELEMENTAL in particular works.
7 ! Contributed by Daniel Kraft, d@domob.eu.
12 INTEGER, PARAMETER :: n = 5
19 ! This ought to work (without any effect).
20 IMPURE SUBROUTINE foobar ()
23 IMPURE ELEMENTAL SUBROUTINE impureSub (a)
24 INTEGER, INTENT(IN) :: a
30 END SUBROUTINE impureSub
38 INTEGER :: a(n), b(n), s
40 a = (/ (i, i = 1, n) /)
42 ! Traverse in forward order.
45 IF (ANY (b /= (/ 1, 3, 6, 10, 15 /))) CALL abort ()
49 b = accumulate (a(n:1:-1), s)
50 IF (ANY (b /= (/ 5, 9, 12, 14, 15 /))) CALL abort ()
56 IF (ANY (arr /= a)) CALL abort ()
60 IMPURE ELEMENTAL FUNCTION accumulate (a, s)
61 INTEGER, INTENT(IN) :: a
62 INTEGER, INTENT(INOUT) :: s
67 END FUNCTION accumulate