re PR fortran/78741 (ICE in gfc_get_symbol_decl, at fortran/trans-decl.c:1534)
[official-gcc.git] / gcc / testsuite / gfortran.dg / internal_dummy_3.f08
blob48302cf30245a4da1646f9dd4531e79b6f8e3a0f
1 ! { dg-do run }
2 ! { dg-options "-std=f2008 " }
4 ! PR fortran/34162
5 ! Internal procedures as actual arguments (like restricted closures).
6 ! More challenging test involving recursion.
8 ! Contributed by Daniel Kraft, d@domob.eu.
10 MODULE m
11   IMPLICIT NONE
13   ABSTRACT INTERFACE
14     FUNCTION returnValue ()
15       INTEGER :: returnValue
16     END FUNCTION returnValue
17   END INTERFACE
19   PROCEDURE(returnValue), POINTER :: first
21 CONTAINS
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
29     END IF
31     IF (PRESENT (previous)) THEN
32       IF (previous () /= level - 2) STOP 2
33     END IF
35     IF (level == 1) THEN
36       first => myLevel
37     END IF
38     IF (first () /= 1) STOP 3
40     IF (level == 10) RETURN
42     IF (PRESENT (current)) THEN
43       CALL test (level + 1, myLevel, current)
44     ELSE
45       CALL test (level + 1, myLevel)
46     END IF
48   CONTAINS
50     FUNCTION myLevel ()
51       INTEGER :: myLevel
52       myLevel = level
53     END FUNCTION myLevel
54     
55   END SUBROUTINE test
57 END MODULE m
59 PROGRAM main
60   USE :: m
61   IMPLICIT NONE
63   CALL test (1)
64 END PROGRAM main