Internal procedures as dummy arguments in gfortran?

Daniel Kraft d@domob.eu
Wed Sep 23 10:55:00 GMT 2009


Paul Richard Thomas wrote:
> To my astonishment, given some of the remarks, changing the error to
> an error on notification works just fine on FC9/i386 :-)

Have you tried this with some kind of more complicated stuff?  I'm no
expert on using PROCEDURE and procedures as actual arguments, but
something along:

ABSTRACT INTERFACE
   INTEGER FUNCTION myproc ()
     IMPLICIT NONE
   END FUNCTION myproc
END ABSTRACT INTERFACE

...

IMPLICIT NONE

...

SUBROUTINE sub1 (proc)
   PROCEDURE(myproc) :: proc
   CALL sub2 (proc)
END SUBROUTINE sub1

SUBROUTINE sub2 (p1, p2)
   PROCEDURE(myproc) :: p1, p2
   PRINT *, p1 () ! Should be 1
   PRINT *, p2 () ! Should be 2
END SUBROUTINE sub2

RECURSIVE SUBROUTINE sub2 (proc)
   PROCEDURE(myproc), OPTIONAL :: proc

   INTEGER :: a

   IF (PRESENT (proc))
     a = 2
     CALL sub2 (proc, internal_proc)
   ELSE
     a = 1
     CALL sub1 (internal_proc)
   END IF

CONTAINS

   INTEGER FUNCTION internal_proc ()
     internal_proc = a
   END FUNCTION internal_proc

END SUBROUTINE sub3

At least I would expect this to behave as indicated by the comments,
though I've not checked with the standard.  I'd be very surprised if
that worked just out-of-the-box, too, when disabling the error.  But you
could try!  If it does, I guess we can claim this F2008 feature
implemented :D

Daniel

-- 
Done:  Arc-Bar-Cav-Ran-Rog-Sam-Tou-Val-Wiz
To go: Hea-Kni-Mon-Pri



More information about the Fortran mailing list