1! { dg-do run } 2! { dg-options "-std=f2008 -fall-intrinsics" } 3 4! PR fortran/34162 5! Internal procedures as actual arguments (like restricted closures). 6! Check it works basically. 7 8! Contributed by Daniel Kraft, d@domob.eu. 9 10MODULE m 11 IMPLICIT NONE 12 13 ABSTRACT INTERFACE 14 FUNCTION returnValue () 15 INTEGER :: returnValue 16 END FUNCTION returnValue 17 18 SUBROUTINE doSomething () 19 END SUBROUTINE doSomething 20 END INTERFACE 21 22CONTAINS 23 24 FUNCTION callIt (proc) 25 PROCEDURE(returnValue) :: proc 26 INTEGER :: callIt 27 28 callIt = proc () 29 END FUNCTION callIt 30 31 SUBROUTINE callSub (proc) 32 PROCEDURE(doSomething) :: proc 33 34 CALL proc () 35 END SUBROUTINE callSub 36 37END MODULE m 38 39PROGRAM main 40 USE :: m 41 IMPLICIT NONE 42 43 INTEGER :: a 44 45 a = 42 46 IF (callIt (myA) /= 42) CALL abort () 47 48 CALL callSub (incA) 49 IF (a /= 43) CALL abort () 50 51CONTAINS 52 53 FUNCTION myA () 54 INTEGER :: myA 55 myA = a 56 END FUNCTION myA 57 58 SUBROUTINE incA () 59 a = a + 1 60 END SUBROUTINE incA 61 62END PROGRAM main 63