Commits

Craig Rasmussen  committed aba2573

Initial version.

  • Participants
  • Parent commits 732785a

Comments (0)

Files changed (1)

File ompi/mpi/fortran/scripts/pyOFP/tests/mpi-f08-interfaces.py

+
+import OFPTranslators.mpi_f08_interfaces as ast
+import OFP.fortrantypes as ftypes
+
+pg = None
+
+if __name__ == '__main__':
+    pg = ast.ProgramUnit("mpi-f08-interfaces.f90")
+
+    module = ast.Module(pg, "mpi_f08_interfaces")
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Bsend")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Bsend_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Bsend_init")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Bsend_init_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Buffer_attach")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Buffer_attach_f08", ftypes.Void, ['buffer', 'size', 'ierror'])
+
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buffer'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Buffer_detach")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Buffer_detach_f08", ftypes.Void, ['buffer_addr', 'size', 'ierror'])
+
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buffer_addr'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Cancel")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Cancel_f08", ftypes.Void, ['request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(IN)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Get_count")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Get_count_f08", ftypes.Void, ['status', 'datatype', 'count', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Status', 'MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , ['INTENT(IN)'] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ibsend")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ibsend_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iprobe")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iprobe_f08", ftypes.Void, ['source', 'tag', 'comm', 'flag', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['source', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , ['INTENT(OUT)'] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Irecv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Irecv_f08", ftypes.Void, ['buf', 'count', 'datatype', 'source', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'source', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Irsend")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Irsend_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Isend")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Isend_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Issend")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Issend_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Probe")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Probe_f08", ftypes.Void, ['source', 'tag', 'comm', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['source', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , ['INTENT(OUT)'] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Recv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Recv_f08", ftypes.Void, ['buf', 'count', 'datatype', 'source', 'tag', 'comm', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'source', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Recv_init")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Recv_init_f08", ftypes.Void, ['buf', 'count', 'datatype', 'source', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'source', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Request_free")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Request_free_f08", ftypes.Void, ['request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Request_get_status")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Request_get_status_f08", ftypes.Void, ['request', 'flag', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(IN)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Rsend")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Rsend_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Rsend_init")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Rsend_init_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Send")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Send_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Sendrecv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Sendrecv_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'dest', 'sendtag', 'recvbuf', 'recvcount', 'recvtype', 'source', 'recvtag', 'comm', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'dest', 'sendtag', 'recvcount', 'source', 'recvtag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Sendrecv_replace")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Sendrecv_replace_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'sendtag', 'source', 'recvtag', 'comm', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'sendtag', 'source', 'recvtag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Send_init")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Send_init_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ssend")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ssend_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ssend_init")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ssend_init_f08", ftypes.Void, ['buf', 'count', 'datatype', 'dest', 'tag', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['buf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'dest', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Start")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Start_f08", ftypes.Void, ['request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Startall")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Startall_f08", ftypes.Void, ['count', 'array_of_requests', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['array_of_requests()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Test")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Test_f08", ftypes.Void, ['request', 'flag', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Testall")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Testall_f08", ftypes.Void, ['count', 'array_of_requests', 'flag', 'array_of_statuses', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['array_of_requests()'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['array_of_statuses(*)'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Testany")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Testany_f08", ftypes.Void, ['count', 'array_of_requests', 'index', 'flag', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['array_of_requests()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['index'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Testsome")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Testsome_f08", ftypes.Void, ['incount', 'array_of_requests', 'outcount', 'array_of_indices', 'array_of_statuses', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['incount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['array_of_requests()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['outcount', 'array_of_indices(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['array_of_statuses(*)'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Test_cancelled")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Test_cancelled_f08", ftypes.Void, ['status', 'flag', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , ['INTENT(IN)'] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Wait")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Wait_f08", ftypes.Void, ['request', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Waitall")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Waitall_f08", ftypes.Void, ['count', 'array_of_requests', 'array_of_statuses', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['array_of_requests()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['array_of_statuses(*)'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Waitany")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Waitany_f08", ftypes.Void, ['count', 'array_of_requests', 'index', 'status', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['array_of_requests()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['index'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Waitsome")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Waitsome_f08", ftypes.Void, ['incount', 'array_of_requests', 'outcount', 'array_of_indices', 'array_of_statuses', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Request', 'MPI_Status'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['incount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(INOUT)'] , ['array_of_requests()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['outcount', 'array_of_indices(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , [] , ['array_of_statuses(*)'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Get_address")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Get_address_f08", ftypes.Void, ['location', 'address', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'ASYNCHRONOUS'] , ['location'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(OUT)'] , ['address'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Get_elements")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Get_elements_f08", ftypes.Void, ['status', 'datatype', 'count', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Status', 'MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Status") , ['INTENT(IN)'] , ['status'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Pack")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Pack_f08", ftypes.Void, ['inbuf', 'incount', 'datatype', 'outbuf', 'outsize', 'position', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['inbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['outbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['incount', 'outsize'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(INOUT)'] , ['position'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Pack_external")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Pack_external_f08", ftypes.Void, ['datarep', 'inbuf', 'incount', 'datatype', 'outbuf', 'outsize', 'position', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Character(LEN=*) , ['INTENT(IN)'] , ['datarep'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['inbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['outbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['incount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['outsize'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(INOUT)'] , ['position'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Pack_external_size")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Pack_external_size_f08", ftypes.Void, ['datarep', 'incount', 'datatype', 'size', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['incount'] )
+    ast.VarDecl(fdecl, ftypes.Character(LEN=*) , ['INTENT(IN)'] , ['datarep'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(OUT)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Pack_size")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Pack_size_f08", ftypes.Void, ['incount', 'datatype', 'comm', 'size', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['incount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_commit")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_commit_f08", ftypes.Void, ['datatype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(INOUT)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_contiguous")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_contiguous_f08", ftypes.Void, ['count', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_darray")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_darray_f08", ftypes.Void, ['size', 'rank', 'ndims', 'array_of_gsizes', 'array_of_distribs', 'array_of_dargs', 'array_of_psizes', 'order', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['size', 'rank', 'ndims', 'order'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_gsizes()', 'array_of_distribs()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_dargs()', 'array_of_psizes()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_hindexed")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_hindexed_f08", ftypes.Void, ['count', 'array_of_blocklengths', 'array_of_displacements', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_blocklengths()'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['array_of_displacements()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_hvector")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_hvector_f08", ftypes.Void, ['count', 'blocklength', 'stride', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'blocklength'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['stride'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_indexed_block")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_indexed_block_f08", ftypes.Void, ['count', 'blocklength', 'array_of_displacements', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'blocklength'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_displacements()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_hindexed_block")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_hindexed_block_f08", ftypes.Void, ['count', 'blocklength', 'array_of_displacements', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'blocklength'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['array_of_displacements()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_resized")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_resized_f08", ftypes.Void, ['oldtype', 'lb', 'extent', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['lb', 'extent'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_struct")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_struct_f08", ftypes.Void, ['count', 'array_of_blocklengths', 'array_of_displacements', 'array_of_types', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_blocklengths()'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['array_of_displacements()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['array_of_types()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_subarray")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_subarray_f08", ftypes.Void, ['ndims', 'array_of_sizes', 'array_of_subsizes', 'array_of_starts', 'order', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['ndims', 'order'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_sizes()', 'array_of_subsizes()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_starts()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_dup")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_dup_f08", ftypes.Void, ['oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_free")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_free_f08", ftypes.Void, ['datatype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(INOUT)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_get_contents")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_get_contents_f08", ftypes.Void, ['datatype', 'max_integers', 'max_addresses', 'max_datatypes', 'array_of_integers', 'array_of_addresses', 'array_of_datatypes', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['max_integers', 'max_addresses', 'max_datatypes'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['array_of_integers()'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(OUT)'] , ['array_of_addresses()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['array_of_datatypes()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_get_envelope")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_get_envelope_f08", ftypes.Void, ['datatype', 'num_integers', 'num_addresses', 'num_datatypes', 'combiner', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['num_integers', 'num_addresses', 'num_datatypes', 'combiner'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_get_extent")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_get_extent_f08", ftypes.Void, ['datatype', 'lb', 'extent', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(OUT)'] , ['lb', 'extent'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_get_true_extent")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_get_true_extent_f08", ftypes.Void, ['datatype', 'true_lb', 'true_extent', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(OUT)'] , ['true_lb', 'true_extent'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_indexed")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_indexed_f08", ftypes.Void, ['count', 'array_of_blocklengths', 'array_of_displacements', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['array_of_blocklengths()', 'array_of_displacements()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_size")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_size_f08", ftypes.Void, ['datatype', 'size', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_vector")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_vector_f08", ftypes.Void, ['count', 'blocklength', 'stride', 'oldtype', 'newtype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'blocklength', 'stride'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['oldtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(OUT)'] , ['newtype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Unpack")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Unpack_f08", ftypes.Void, ['inbuf', 'insize', 'position', 'outbuf', 'outcount', 'datatype', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['inbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['outbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['insize', 'outcount'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(INOUT)'] , ['position'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Unpack_external")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Unpack_external_f08", ftypes.Void, ['datarep', 'inbuf', 'insize', 'position', 'outbuf', 'outcount', 'datatype', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Character(LEN=*) , ['INTENT(IN)'] , ['datarep'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['inbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['outbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['insize'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(INOUT)'] , ['position'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['outcount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Allgather")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Allgather_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iallgather")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iallgather_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Allgatherv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Allgatherv_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcounts', 'displs', 'recvtype', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcounts(*)', 'displs(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iallgatherv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iallgatherv_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcounts', 'displs', 'recvtype', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcounts(*)', 'displs(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Allreduce")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Allreduce_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iallreduce")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iallreduce_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Alltoall")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Alltoall_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ialltoall")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ialltoall_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Alltoallv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Alltoallv_f08", ftypes.Void, ['sendbuf', 'sendcounts', 'sdispls', 'sendtype', 'recvbuf', 'recvcounts', 'rdispls', 'recvtype', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcounts(*)', 'sdispls(*)', 'recvcounts(*)', 'rdispls(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ialltoallv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ialltoallv_f08", ftypes.Void, ['sendbuf', 'sendcounts', 'sdispls', 'sendtype', 'recvbuf', 'recvcounts', 'rdispls', 'recvtype', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcounts(*)', 'sdispls(*)', 'recvcounts(*)', 'rdispls(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(IN)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Alltoallw")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Alltoallw_f08", ftypes.Void, ['sendbuf', 'sendcounts', 'sdispls', 'sendtypes', 'recvbuf', 'recvcounts', 'rdispls', 'recvtypes', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcounts(*)', 'sdispls(*)', 'recvcounts(*)', 'rdispls(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtypes(*)', 'recvtypes(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ialltoallw")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ialltoallw_f08", ftypes.Void, ['sendbuf', 'sendcounts', 'sdispls', 'sendtypes', 'recvbuf', 'recvcounts', 'rdispls', 'recvtypes', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcounts(*)', 'sdispls(*)', 'recvcounts(*)', 'rdispls(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtypes(*)', 'recvtypes(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(IN)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Barrier")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Barrier_f08", ftypes.Void, ['comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ibarrier")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ibarrier_f08", ftypes.Void, ['comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Bcast")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Bcast_f08", ftypes.Void, ['buffer', 'count', 'datatype', 'root', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['buffer'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ibcast")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ibcast_f08", ftypes.Void, ['buffer', 'count', 'datatype', 'root', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['buffer'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Exscan")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Exscan_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iexscan")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iexscan_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Gather")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Gather_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'root', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Igather")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Igather_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'root', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Gatherv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Gatherv_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcounts', 'displs', 'recvtype', 'root', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcounts(*)', 'displs(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Igatherv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Igatherv_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcounts', 'displs', 'recvtype', 'root', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcounts(*)', 'displs(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Op_commutative")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Op_commutative_f08", ftypes.Void, ['op', 'commute', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['commute'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Op_create")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Op_create_f08", ftypes.Void, ['user_fn', 'commute', 'op', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Op'] )
+    ast.UseStmt(fdecl, None , None , "mpi_f08_interfaces_callbacks" , ['MPI_User_function'] )
+    ast.ProcDecl(fdecl, "MPI_User_function" , ['user_fn'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(IN)'] , ['commute'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(OUT)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Op_free")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Op_free_f08", ftypes.Void, ['op', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(INOUT)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Reduce")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Reduce_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'root', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ireduce")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ireduce_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'root', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Reduce_local")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Reduce_local_f08", ftypes.Void, ['inbuf', 'inoutbuf', 'count', 'datatype', 'op', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['inbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['inoutbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Reduce_scatter")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Reduce_scatter_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'recvcounts', 'datatype', 'op', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcounts(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ireduce_scatter")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ireduce_scatter_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'recvcounts', 'datatype', 'op', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcounts(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Reduce_scatter_block")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Reduce_scatter_block_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'recvcount', 'datatype', 'op', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Ireduce_scatter_block")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Ireduce_scatter_block_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'recvcount', 'datatype', 'op', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcount'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Scan")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Scan_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iscan")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iscan_f08", ftypes.Void, ['sendbuf', 'recvbuf', 'count', 'datatype', 'op', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Op', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['count'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['datatype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Op") , ['INTENT(IN)'] , ['op'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Scatter")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Scatter_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'root', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iscatter")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iscatter_f08", ftypes.Void, ['sendbuf', 'sendcount', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'root', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcount', 'recvcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Scatterv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Scatterv_f08", ftypes.Void, ['sendbuf', 'sendcounts', 'displs', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'root', 'comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcounts(*)', 'displs(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Iscatterv")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Iscatterv_f08", ftypes.Void, ['sendbuf', 'sendcounts', 'displs', 'sendtype', 'recvbuf', 'recvcount', 'recvtype', 'root', 'comm', 'request', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Datatype', 'MPI_Comm', 'MPI_Request'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)', 'INTENT(IN)'] , ['sendbuf'] )
+    ast.VarDecl(fdecl, ftypes.Assumed() , ['DIMENSION(..)'] , ['recvbuf'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['recvcount', 'root'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['sendcounts(*)', 'displs(*)'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Datatype") , ['INTENT(IN)'] , ['sendtype', 'recvtype'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Request") , ['INTENT(OUT)'] , ['request'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_compare")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_compare_f08", ftypes.Void, ['comm1', 'comm2', 'result', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm1'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm2'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['result'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_create")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_create_f08", ftypes.Void, ['comm', 'group', 'newcomm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(OUT)'] , ['newcomm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_create_keyval")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_create_keyval_f08", ftypes.Void, ['comm_copy_attr_fn', 'comm_delete_attr_fn', 'comm_keyval', 'extra_state', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_ADDRESS_KIND'] )
+    ast.UseStmt(fdecl, None , None , "mpi_f08_interfaces_callbacks" , ['MPI_Comm_copy_attr_function'] )
+    ast.UseStmt(fdecl, None , None , "mpi_f08_interfaces_callbacks" , ['MPI_Comm_delete_attr_function'] )
+    ast.ProcDecl(fdecl, "MPI_Comm_copy_attr_function" , ['comm_copy_attr_fn'] )
+    ast.ProcDecl(fdecl, "MPI_Comm_delete_attr_function" , ['comm_delete_attr_fn'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['comm_keyval'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['extra_state'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_delete_attr")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_delete_attr_f08", ftypes.Void, ['comm', 'comm_keyval', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['comm_keyval'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_dup")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_dup_f08", ftypes.Void, ['comm', 'newcomm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(OUT)'] , ['newcomm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_free")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_free_f08", ftypes.Void, ['comm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(INOUT)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_free_keyval")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_free_keyval_f08", ftypes.Void, ['comm_keyval', 'ierror'])
+
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(INOUT)'] , ['comm_keyval'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_get_attr")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_get_attr_f08", ftypes.Void, ['comm', 'comm_keyval', 'attribute_val', 'flag', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['comm_keyval'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(OUT)'] , ['attribute_val'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_get_name")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_get_name_f08", ftypes.Void, ['comm', 'comm_name', 'resultlen', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_MAX_OBJECT_NAME'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Character(MPI_MAX_OBJECT_NAME) , ['INTENT(OUT)'] , ['comm_name'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['resultlen'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_group")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_group_f08", ftypes.Void, ['comm', 'group', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_rank")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_rank_f08", ftypes.Void, ['comm', 'rank', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['rank'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_remote_group")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_remote_group_f08", ftypes.Void, ['comm', 'group', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_remote_size")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_remote_size_f08", ftypes.Void, ['comm', 'size', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_set_attr")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_set_attr_f08", ftypes.Void, ['comm', 'comm_keyval', 'attribute_val', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm', 'MPI_ADDRESS_KIND'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['comm_keyval'] )
+    ast.VarDecl(fdecl, ftypes.Integer(MPI_ADDRESS_KIND) , ['INTENT(IN)'] , ['attribute_val'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_set_name")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_set_name_f08", ftypes.Void, ['comm', 'comm_name', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Character(LEN=*) , ['INTENT(IN)'] , ['comm_name'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_size")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_size_f08", ftypes.Void, ['comm', 'size', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_split")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_split_f08", ftypes.Void, ['comm', 'color', 'key', 'newcomm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['color', 'key'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(OUT)'] , ['newcomm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Comm_test_inter")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Comm_test_inter_f08", ftypes.Void, ['comm', 'flag', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['comm'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(OUT)'] , ['flag'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_compare")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_compare_f08", ftypes.Void, ['group1', 'group2', 'result', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group1', 'group2'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['result'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_difference")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_difference_f08", ftypes.Void, ['group1', 'group2', 'newgroup', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group1', 'group2'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['newgroup'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_excl")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_excl_f08", ftypes.Void, ['group', 'n', 'ranks', 'newgroup', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['n', 'ranks()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['newgroup'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_free")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_free_f08", ftypes.Void, ['group', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(INOUT)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_incl")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_incl_f08", ftypes.Void, ['group', 'n', 'ranks', 'newgroup', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['n', 'ranks()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['newgroup'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_intersection")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_intersection_f08", ftypes.Void, ['group1', 'group2', 'newgroup', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group1', 'group2'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['newgroup'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_range_excl")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_range_excl_f08", ftypes.Void, ['group', 'n', 'ranges', 'newgroup', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['n', 'ranges()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['newgroup'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_range_incl")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_range_incl_f08", ftypes.Void, ['group', 'n', 'ranges', 'newgroup', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['n', 'ranges()'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['newgroup'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_rank")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_rank_f08", ftypes.Void, ['group', 'rank', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['rank'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_size")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_size_f08", ftypes.Void, ['group', 'size', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['size'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_translate_ranks")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_translate_ranks_f08", ftypes.Void, ['group1', 'n', 'ranks1', 'group2', 'ranks2', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group1', 'group2'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['n'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['ranks1()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(OUT)'] , ['ranks2()'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Group_union")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Group_union_f08", ftypes.Void, ['group1', 'group2', 'newgroup', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Group'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(IN)'] , ['group1', 'group2'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Group") , ['INTENT(OUT)'] , ['newgroup'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Intercomm_create")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Intercomm_create_f08", ftypes.Void, ['local_comm', 'local_leader', 'peer_comm', 'remote_leader', 'tag', 'newintercomm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['local_comm', 'peer_comm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['INTENT(IN)'] , ['local_leader', 'remote_leader', 'tag'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(OUT)'] , ['newintercomm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Intercomm_merge")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Intercomm_merge_f08", ftypes.Void, ['intercomm', 'high', 'newintracomm', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_Comm'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(IN)'] , ['intercomm'] )
+    ast.VarDecl(fdecl, ftypes.Logical , ['INTENT(IN)'] , ['high'] )
+    ast.VarDecl(fdecl, ftypes.Derived("MPI_Comm") , ['INTENT(OUT)'] , ['newintracomm'] )
+    ast.VarDecl(fdecl, ftypes.Integer , ['OPTIONAL', 'INTENT(OUT)'] , ['ierror'] )
+
+
+    #--------------------------
+    interface = ast.InterfaceBlock(module, "MPI_Type_create_keyval")
+
+    fdecl = ast.FunctionDecl(interface, "MPI_Type_create_keyval_f08", ftypes.Void, ['type_copy_attr_fn', 'type_delete_attr_fn', 'type_keyval', 'extra_state', 'ierror'])
+
+    ast.UseStmt(fdecl, None , None , "mpi_f08_types" , ['MPI_ADDRESS_KIND'] )
+    ast.UseStmt(fdecl, None , None