2 ! { dg-options "-std=f2008 " }
5 ! Internal procedures as actual arguments (like restricted closures).
6 ! More challenging test involving recursion.
8 ! Contributed by Daniel Kraft, d@domob.eu.
14 FUNCTION returnValue ()
15 INTEGER :: returnValue
16 END FUNCTION returnValue
19 PROCEDURE(returnValue), POINTER :: first
23 RECURSIVE SUBROUTINE test (level, current, previous)
24 INTEGER, INTENT(IN) :: level
25 PROCEDURE(returnValue), OPTIONAL :: previous, current
27 IF (PRESENT (current)) THEN
28 IF (current () /= level - 1) STOP 1
31 IF (PRESENT (previous)) THEN
32 IF (previous () /= level - 2) STOP 2
38 IF (first () /= 1) STOP 3
40 IF (level == 10) RETURN
42 IF (PRESENT (current)) THEN
43 CALL test (level + 1, myLevel, current)
45 CALL test (level + 1, myLevel)