[Fortran] OpenACC – permit common blocks in some clauses
[official-gcc.git] / gcc / testsuite / gfortran.dg / internal_dummy_2.f08
blob5137b6cd9a4d35ee8c4f235fc2fcf57fc254da3c
1 ! { dg-do run }
2 ! { dg-options "-std=f2008 " }
4 ! PR fortran/34162
5 ! Internal procedures as actual arguments (like restricted closures).
6 ! Check it works basically.
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
18     SUBROUTINE doSomething ()
19     END SUBROUTINE doSomething
20   END INTERFACE
22 CONTAINS
24   FUNCTION callIt (proc)
25     PROCEDURE(returnValue) :: proc
26     INTEGER :: callIt
28     callIt = proc ()
29   END FUNCTION callIt
31   SUBROUTINE callSub (proc)
32     PROCEDURE(doSomething) :: proc
34     CALL proc ()
35   END SUBROUTINE callSub
37 END MODULE m
39 PROGRAM main
40   USE :: m
41   IMPLICIT NONE
43   INTEGER :: a
45   a = 42
46   IF (callIt (myA) /= 42) STOP 1
48   CALL callSub (incA)
49   IF (a /= 43) STOP 2
51 CONTAINS
53   FUNCTION myA ()
54     INTEGER :: myA
55     myA = a
56   END FUNCTION myA
58   SUBROUTINE incA ()
59     a = a + 1
60   END SUBROUTINE incA
62 END PROGRAM main