Assumed-shape and allocatable arrays are passed using an array descriptor (dope vector). The internal structure of the array descriptor used by GNU Fortran is not yet documented and will change. There will also be a Technical Specification (TS 29113) which standardizes an interoperable array descriptor. Until then, you can use the Chasm Language Interoperability Tools, http://chasm-interop.sourceforge.net/, which provide an interface to GNU Fortran's array descriptor.
GNU Fortran already supports the C-interoperable OPTIONAL
attribute; for absent arguments, a NULL
pointer is passed.