diff -uNr openmpi-1.7a1r26501/ompi/include/mpi.h.in ompi-trunk/ompi/include/mpi.h.in --- openmpi-1.7a1r26501/ompi/include/mpi.h.in 2012-05-28 05:20:51.000000000 +0300 +++ ompi-trunk/ompi/include/mpi.h.in 2012-05-31 01:51:52.508287154 +0300 @@ -210,6 +210,45 @@ #endif /* #ifndef OMPI_CONFIG_H */ +#if defined(__has_attribute) +# if __has_attribute(pointer_with_type_tag) && \ + __has_attribute(type_tag_for_datatype) +# define OMPI_ATTR_POINTER_WITH_TYPE_TAG(buffer_idx, type_idx) __attribute__((pointer_with_type_tag(MPI,buffer_idx,type_idx))) +# define OMPI_ATTR_TYPE_TAG(type) __attribute__((type_tag_for_datatype(MPI,type))) +# define OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(type) __attribute__((type_tag_for_datatype(MPI,type,layout_compatible))) +# define OMPI_ATTR_TYPE_TAG_MUST_BE_NULL() __attribute__((type_tag_for_datatype(MPI,void,must_be_null))) +# if defined(__cplusplus) +# include +# endif +# endif +#endif + +#if !defined(OMPI_ATTR_POINTER_WITH_TYPE_TAG) +# define OMPI_ATTR_POINTER_WITH_TYPE_TAG(buffer_idx, type_idx) +# define OMPI_ATTR_TYPE_TAG(type) +# define OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(type) +# define OMPI_ATTR_TYPE_TAG_MUST_BE_NULL() +#endif + +#if defined(INT8_C) +/* stdint.h was included, so we can annotate these types */ +# define OMPI_ATTR_TYPE_TAG_STDINT(type) OMPI_ATTR_TYPE_TAG(type) +#else +# define OMPI_ATTR_TYPE_TAG_STDINT(type) +#endif + +#if __STDC_VERSION__ >= 199901 +# define OMPI_ATTR_TYPE_TAG_C99(type) OMPI_ATTR_TYPE_TAG(type) +#else +# define OMPI_ATTR_TYPE_TAG_C99(type) +#endif + +#if defined(__cplusplus) +# define OMPI_ATTR_TYPE_TAG_CXX(type) OMPI_ATTR_TYPE_TAG(type) +#else +# define OMPI_ATTR_TYPE_TAG_CXX(type) +#endif + /* @OMPI_END_CONFIGURE_SECTION@ */ /* include for ptrdiff_t */ @@ -784,35 +823,35 @@ OMPI_DECLSPEC extern struct ompi_predefined_op_t ompi_mpi_op_replace; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_datatype_null; +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_datatype_null OMPI_ATTR_TYPE_TAG_MUST_BE_NULL(); OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_lb __mpi_interface_deprecated__("MPI_LB is deprecated in MPI-2.0"); OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_ub __mpi_interface_deprecated__("MPI_UB is deprecated in MPI-2.0"); -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_char; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_signed_char; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_char; +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_char OMPI_ATTR_TYPE_TAG(char); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_signed_char OMPI_ATTR_TYPE_TAG(signed char); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_char OMPI_ATTR_TYPE_TAG(unsigned char); OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_byte; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_short; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_short; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_long; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long_long_int; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_long_long; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_float; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_double; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long_double; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_wchar; +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_short OMPI_ATTR_TYPE_TAG(signed short int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_short OMPI_ATTR_TYPE_TAG(unsigned short int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int OMPI_ATTR_TYPE_TAG(signed int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned OMPI_ATTR_TYPE_TAG(unsigned int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long OMPI_ATTR_TYPE_TAG(signed long int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_long OMPI_ATTR_TYPE_TAG(unsigned long int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long_long_int OMPI_ATTR_TYPE_TAG(long long int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_unsigned_long_long OMPI_ATTR_TYPE_TAG(unsigned long long int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_float OMPI_ATTR_TYPE_TAG(float); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_double OMPI_ATTR_TYPE_TAG(double); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long_double OMPI_ATTR_TYPE_TAG(long double); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_wchar OMPI_ATTR_TYPE_TAG(wchar_t); OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_packed; /* * Following are the C++/C99 datatypes */ -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_bool; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_cplex; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_dblcplex; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_ldblcplex; +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_bool OMPI_ATTR_TYPE_TAG_CXX(bool); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_cplex OMPI_ATTR_TYPE_TAG_CXX(std::complex); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_dblcplex OMPI_ATTR_TYPE_TAG_CXX(std::complex); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cxx_ldblcplex OMPI_ATTR_TYPE_TAG_CXX(std::complex); /* * Following are the Fortran datatypes @@ -827,18 +866,24 @@ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_ldblcplex; /* Aggregate struct datatypes are not const */ -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2int; +struct ompi_struct_mpi_2int { int i1; int i2; }; +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2int OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2int); OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2integer; OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2real; OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2dblprec; OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2cplex; OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2dblcplex; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_float_int; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_double_int; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_longdbl_int; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_short_int; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long_int; +struct ompi_struct_mpi_float_int { float f; int i; }; +struct ompi_struct_mpi_double_int { double d; int i; }; +struct ompi_struct_mpi_longdbl_int { long double ld; int i; }; +struct ompi_struct_mpi_short_int { short s; int i; }; +struct ompi_struct_mpi_long_int { long l; int i; }; +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_float_int OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_float_int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_double_int OMPI_ATTR_TYPE_TAG(struct ompi_struct_mpi_double_int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_longdbl_int OMPI_ATTR_TYPE_TAG(struct ompi_struct_mpi_longdbl_int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_short_int OMPI_ATTR_TYPE_TAG(struct ompi_struct_mpi_short_int); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long_int OMPI_ATTR_TYPE_TAG(struct ompi_struct_mpi_long_int); /* Optional MPI2 datatypes, always declared and defined, but not "exported" as MPI_LOGICAL1 */ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical1; @@ -859,21 +904,21 @@ OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_complex32; /* New datatypes from the MPI 2.2 standard */ -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int8_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint8_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int16_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint16_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int32_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint32_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int64_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint64_t; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_aint; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_offset; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_bool; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_complex; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_float_complex; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_double_complex; -OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_long_double_complex; +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int8_t OMPI_ATTR_TYPE_TAG_STDINT(int8_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint8_t OMPI_ATTR_TYPE_TAG_STDINT(uint8_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int16_t OMPI_ATTR_TYPE_TAG_STDINT(int16_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint16_t OMPI_ATTR_TYPE_TAG_STDINT(uint16_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int32_t OMPI_ATTR_TYPE_TAG_STDINT(int32_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint32_t OMPI_ATTR_TYPE_TAG_STDINT(uint32_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_int64_t OMPI_ATTR_TYPE_TAG_STDINT(int64_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_uint64_t OMPI_ATTR_TYPE_TAG_STDINT(uint64_t); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_aint OMPI_ATTR_TYPE_TAG(MPI_Aint); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_offset OMPI_ATTR_TYPE_TAG(MPI_Offset); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_bool OMPI_ATTR_TYPE_TAG_C99(_Bool); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_complex OMPI_ATTR_TYPE_TAG_C99(float _Complex); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_float_complex OMPI_ATTR_TYPE_TAG_C99(float _Complex); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_double_complex OMPI_ATTR_TYPE_TAG_C99(double _Complex); +OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_c_long_double_complex OMPI_ATTR_TYPE_TAG_C99(long double _Complex); OMPI_DECLSPEC extern struct ompi_predefined_errhandler_t ompi_mpi_errhandler_null; OMPI_DECLSPEC extern struct ompi_predefined_errhandler_t ompi_mpi_errors_are_fatal; @@ -1040,7 +1085,8 @@ OMPI_DECLSPEC int MPI_Abort(MPI_Comm comm, int errorcode); OMPI_DECLSPEC int MPI_Accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, - MPI_Datatype target_datatype, MPI_Op op, MPI_Win win); + MPI_Datatype target_datatype, MPI_Op op, MPI_Win win) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Add_error_class(int *errorclass); OMPI_DECLSPEC int MPI_Add_error_code(int errorclass, int *errorcode); OMPI_DECLSPEC int MPI_Add_error_string(int errorcode, char *string); @@ -1048,20 +1094,30 @@ __mpi_interface_deprecated__("MPI_Address is superseded by MPI_Get_address in MPI-2.0"); OMPI_DECLSPEC int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, - MPI_Datatype recvtype, MPI_Comm comm); + MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int MPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, - int *displs, MPI_Datatype recvtype, MPI_Comm comm); + int *displs, MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,7); OMPI_DECLSPEC int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr); OMPI_DECLSPEC int MPI_Allreduce(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, - MPI_Datatype recvtype, MPI_Comm comm); + MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int MPI_Alltoallv(void *sendbuf, int *sendcounts, int *sdispls, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, - int *rdispls, MPI_Datatype recvtype, MPI_Comm comm); + int *rdispls, MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(5,8); OMPI_DECLSPEC int MPI_Alltoallw(void *sendbuf, int *sendcounts, int *sdispls, MPI_Datatype *sendtypes, void *recvbuf, int *recvcounts, int *rdispls, MPI_Datatype *recvtypes, MPI_Comm comm); @@ -1073,11 +1129,14 @@ __mpi_interface_deprecated__("MPI_Attr_put is superseded by MPI_Comm_set_attr in MPI-2.0"); OMPI_DECLSPEC int MPI_Barrier(MPI_Comm comm); OMPI_DECLSPEC int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, - int root, MPI_Comm comm); + int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, - int dest, int tag, MPI_Comm comm); + int dest, int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Bsend_init(void *buf, int count, MPI_Datatype datatype, - int dest, int tag, MPI_Comm comm, MPI_Request *request); + int dest, int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Buffer_attach(void *buffer, int size); OMPI_DECLSPEC int MPI_Buffer_detach(void *buffer, int *size); OMPI_DECLSPEC int MPI_Cancel(MPI_Request *request); @@ -1151,7 +1210,9 @@ OMPI_DECLSPEC int MPI_Error_class(int errorcode, int *errorclass); OMPI_DECLSPEC int MPI_Error_string(int errorcode, char *string, int *resultlen); OMPI_DECLSPEC int MPI_Exscan(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); #if OMPI_PROVIDE_MPI_FILE_INTERFACE OMPI_DECLSPEC MPI_Fint MPI_File_c2f(MPI_File file); OMPI_DECLSPEC MPI_File MPI_File_f2c(MPI_Fint file); @@ -1247,17 +1308,22 @@ OMPI_DECLSPEC int MPI_Free_mem(void *base); OMPI_DECLSPEC int MPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, - int root, MPI_Comm comm); + int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int MPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, - MPI_Datatype recvtype, int root, MPI_Comm comm); + MPI_Datatype recvtype, int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,7); OMPI_DECLSPEC int MPI_Get_address(void *location, MPI_Aint *address); OMPI_DECLSPEC int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count); OMPI_DECLSPEC int MPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, int *count); OMPI_DECLSPEC int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, - MPI_Datatype target_datatype, MPI_Win win); + MPI_Datatype target_datatype, MPI_Win win) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Get_library_version(char *version, int *resultlen); OMPI_DECLSPEC int MPI_Get_processor_name(char *name, int *resultlen); OMPI_DECLSPEC int MPI_Get_version(int *version, int *subversion); @@ -1299,12 +1365,14 @@ OMPI_DECLSPEC int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup); OMPI_DECLSPEC int MPI_Ibsend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message, MPI_Status *status); OMPI_DECLSPEC int MPI_Imrecv(void *buf, int count, MPI_Datatype type, - MPI_Message *message, MPI_Request *request); + MPI_Message *message, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC MPI_Fint MPI_Info_c2f(MPI_Info info); OMPI_DECLSPEC int MPI_Info_create(MPI_Info *info); OMPI_DECLSPEC int MPI_Info_delete(MPI_Info info, char *key); @@ -1330,13 +1398,17 @@ OMPI_DECLSPEC int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status); OMPI_DECLSPEC int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Irsend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Issend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Is_thread_main(int *flag); OMPI_DECLSPEC int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn, @@ -1351,7 +1423,8 @@ MPI_Message *message, MPI_Status *status); OMPI_DECLSPEC int MPI_Mrecv(void *buf, int count, MPI_Datatype type, - MPI_Message *message, MPI_Status *status); + MPI_Message *message, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC MPI_Fint MPI_Op_c2f(MPI_Op op); OMPI_DECLSPEC int MPI_Op_commutative(MPI_Op op, int *commute); OMPI_DECLSPEC int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op); @@ -1360,11 +1433,13 @@ OMPI_DECLSPEC int MPI_Op_free(MPI_Op *op); OMPI_DECLSPEC int MPI_Pack_external(char *datarep, void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, - MPI_Aint outsize, MPI_Aint *position); + MPI_Aint outsize, MPI_Aint *position) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int MPI_Pack_external_size(char *datarep, int incount, MPI_Datatype datatype, MPI_Aint *size); OMPI_DECLSPEC int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, - void *outbuf, int outsize, int *position, MPI_Comm comm); + void *outbuf, int outsize, int *position, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size); OMPI_DECLSPEC int MPI_Pcontrol(const int level, ...); @@ -1373,18 +1448,27 @@ char *port_name); OMPI_DECLSPEC int MPI_Put(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, - MPI_Datatype target_datatype, MPI_Win win); + MPI_Datatype target_datatype, MPI_Win win) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Query_thread(int *provided); OMPI_DECLSPEC int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, - int tag, MPI_Comm comm, MPI_Status *status); + int tag, MPI_Comm comm, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Reduce(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int MPI_Reduce_local(void *inbuf, void *inoutbuf, int count, - MPI_Datatype datatype, MPI_Op op); + MPI_Datatype datatype, MPI_Op op) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int MPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int MPI_Register_datarep(char *datarep, MPI_Datarep_conversion_function *read_conversion_fn, MPI_Datarep_conversion_function *write_conversion_fn, @@ -1396,35 +1480,50 @@ OMPI_DECLSPEC int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status); OMPI_DECLSPEC int MPI_Rsend(void *ibuf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm); + int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Rsend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, - MPI_Request *request); + MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Scan(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, - int root, MPI_Comm comm); + int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int MPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, - MPI_Datatype recvtype, int root, MPI_Comm comm); + MPI_Datatype recvtype, int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(5,7); OMPI_DECLSPEC int MPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, - MPI_Request *request); + MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm); + int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, - MPI_Comm comm, MPI_Status *status); + MPI_Comm comm, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(6,8); OMPI_DECLSPEC int MPI_Sendrecv_replace(void * buf, int count, MPI_Datatype datatype, int dest, int sendtag, int source, int recvtag, - MPI_Comm comm, MPI_Status *status); + MPI_Comm comm, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Ssend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, - MPI_Request *request); + MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Ssend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm); + int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int MPI_Start(MPI_Request *request); OMPI_DECLSPEC int MPI_Startall(int count, MPI_Request *array_of_requests); OMPI_DECLSPEC int MPI_Status_c2f(MPI_Status *c_status, MPI_Fint *f_status); @@ -1528,11 +1627,13 @@ MPI_Datatype oldtype, MPI_Datatype *newtype); OMPI_DECLSPEC int MPI_Unpack(void *inbuf, int insize, int *position, void *outbuf, int outcount, MPI_Datatype datatype, - MPI_Comm comm); + MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int MPI_Unpublish_name(char *service_name, MPI_Info info, char *port_name); OMPI_DECLSPEC int MPI_Unpack_external (char *datarep, void *inbuf, MPI_Aint insize, MPI_Aint *position, void *outbuf, int outcount, - MPI_Datatype datatype); + MPI_Datatype datatype) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(5,7); OMPI_DECLSPEC int MPI_Waitall(int count, MPI_Request *array_of_requests, MPI_Status *array_of_statuses); OMPI_DECLSPEC int MPI_Waitany(int count, MPI_Request *array_of_requests, @@ -1580,7 +1681,8 @@ OMPI_DECLSPEC int PMPI_Abort(MPI_Comm comm, int errorcode); OMPI_DECLSPEC int PMPI_Accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, - MPI_Datatype target_datatype, MPI_Op op, MPI_Win win); + MPI_Datatype target_datatype, MPI_Op op, MPI_Win win) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Add_error_class(int *errorclass); OMPI_DECLSPEC int PMPI_Add_error_code(int errorclass, int *errorcode); OMPI_DECLSPEC int PMPI_Add_error_string(int errorcode, char *string); @@ -1588,20 +1690,30 @@ __mpi_interface_deprecated__("MPI_Address is superseded by MPI_Get_address in MPI-2.0"); OMPI_DECLSPEC int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, - MPI_Datatype recvtype, MPI_Comm comm); + MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, - int *displs, MPI_Datatype recvtype, MPI_Comm comm); + int *displs, MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,7); OMPI_DECLSPEC int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr); OMPI_DECLSPEC int PMPI_Allreduce(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int PMPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, - MPI_Datatype recvtype, MPI_Comm comm); + MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int PMPI_Alltoallv(void *sendbuf, int *sendcounts, int *sdispls, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, - int *rdispls, MPI_Datatype recvtype, MPI_Comm comm); + int *rdispls, MPI_Datatype recvtype, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(5,8); OMPI_DECLSPEC int PMPI_Alltoallw(void *sendbuf, int *sendcounts, int *sdispls, MPI_Datatype *sendtypes, void *recvbuf, int *recvcounts, int *rdispls, MPI_Datatype *recvtypes, MPI_Comm comm); @@ -1613,11 +1725,14 @@ __mpi_interface_deprecated__("MPI_Attr_put is superseded by MPI_Comm_set_attr in MPI-2.0"); OMPI_DECLSPEC int PMPI_Barrier(MPI_Comm comm); OMPI_DECLSPEC int PMPI_Bcast(void *buffer, int count, MPI_Datatype datatype, - int root, MPI_Comm comm); + int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Bsend(void *buf, int count, MPI_Datatype datatype, - int dest, int tag, MPI_Comm comm); + int dest, int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Bsend_init(void *buf, int count, MPI_Datatype datatype, - int dest, int tag, MPI_Comm comm, MPI_Request *request); + int dest, int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Buffer_attach(void *buffer, int size); OMPI_DECLSPEC int PMPI_Buffer_detach(void *buffer, int *size); OMPI_DECLSPEC int PMPI_Cancel(MPI_Request *request); @@ -1691,7 +1806,9 @@ OMPI_DECLSPEC int PMPI_Error_class(int errorcode, int *errorclass); OMPI_DECLSPEC int PMPI_Error_string(int errorcode, char *string, int *resultlen); OMPI_DECLSPEC int PMPI_Exscan(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); #if OMPI_PROVIDE_MPI_FILE_INTERFACE OMPI_DECLSPEC MPI_Fint PMPI_File_c2f(MPI_File file); OMPI_DECLSPEC MPI_File PMPI_File_f2c(MPI_Fint file); @@ -1787,10 +1904,14 @@ OMPI_DECLSPEC int PMPI_Free_mem(void *base); OMPI_DECLSPEC int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, - int root, MPI_Comm comm); + int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, - MPI_Datatype recvtype, int root, MPI_Comm comm); + MPI_Datatype recvtype, int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,7); OMPI_DECLSPEC int PMPI_Get_address(void *location, MPI_Aint *address); OMPI_DECLSPEC int PMPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count); OMPI_DECLSPEC int PMPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, @@ -1798,7 +1919,8 @@ OMPI_DECLSPEC int PMPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, - MPI_Datatype target_datatype, MPI_Win win); + MPI_Datatype target_datatype, MPI_Win win) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Get_library_version(char *version, int *resultlen); OMPI_DECLSPEC int PMPI_Get_processor_name(char *name, int *resultlen); OMPI_DECLSPEC int PMPI_Get_version(int *version, int *subversion); @@ -1840,12 +1962,14 @@ OMPI_DECLSPEC int PMPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup); OMPI_DECLSPEC int PMPI_Ibsend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message, MPI_Status *status); OMPI_DECLSPEC int PMPI_Imrecv(void *buf, int count, MPI_Datatype type, - MPI_Message *message, MPI_Request *request); + MPI_Message *message, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC MPI_Fint PMPI_Info_c2f(MPI_Info info); OMPI_DECLSPEC int PMPI_Info_create(MPI_Info *info); OMPI_DECLSPEC int PMPI_Info_delete(MPI_Info info, char *key); @@ -1871,13 +1995,17 @@ OMPI_DECLSPEC int PMPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status); OMPI_DECLSPEC int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Irsend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Issend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Is_thread_main(int *flag); OMPI_DECLSPEC int PMPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn, @@ -1892,7 +2020,8 @@ MPI_Message *message, MPI_Status *status); OMPI_DECLSPEC int PMPI_Mrecv(void *buf, int count, MPI_Datatype type, - MPI_Message *message, MPI_Status *status); + MPI_Message *message, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC MPI_Fint PMPI_Op_c2f(MPI_Op op); OMPI_DECLSPEC int PMPI_Op_commutative(MPI_Op op, int *commute); OMPI_DECLSPEC int PMPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op); @@ -1901,11 +2030,13 @@ OMPI_DECLSPEC int PMPI_Op_free(MPI_Op *op); OMPI_DECLSPEC int PMPI_Pack_external(char *datarep, void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, - MPI_Aint outsize, MPI_Aint *position); + MPI_Aint outsize, MPI_Aint *position) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int PMPI_Pack_external_size(char *datarep, int incount, MPI_Datatype datatype, MPI_Aint *size); OMPI_DECLSPEC int PMPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, - void *outbuf, int outsize, int *position, MPI_Comm comm); + void *outbuf, int outsize, int *position, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size); OMPI_DECLSPEC int PMPI_Pcontrol(const int level, ...); @@ -1914,18 +2045,27 @@ char *port_name); OMPI_DECLSPEC int PMPI_Put(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, - MPI_Datatype target_datatype, MPI_Win win); + MPI_Datatype target_datatype, MPI_Win win) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Query_thread(int *provided); OMPI_DECLSPEC int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, - int tag, MPI_Comm comm, MPI_Request *request); + int tag, MPI_Comm comm, MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, - int tag, MPI_Comm comm, MPI_Status *status); + int tag, MPI_Comm comm, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int PMPI_Reduce_local(void *inbuf, void *inoutbuf, int count, - MPI_Datatype datatype, MPI_Op); + MPI_Datatype datatype, MPI_Op) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int PMPI_Register_datarep(char *datarep, MPI_Datarep_conversion_function *read_conversion_fn, MPI_Datarep_conversion_function *write_conversion_fn, @@ -1937,35 +2077,50 @@ OMPI_DECLSPEC int PMPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status); OMPI_DECLSPEC int PMPI_Rsend(void *ibuf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm); + int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Rsend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, - MPI_Request *request); + MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Scan(void *sendbuf, void *recvbuf, int count, - MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4); OMPI_DECLSPEC int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, - int root, MPI_Comm comm); + int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, - MPI_Datatype recvtype, int root, MPI_Comm comm); + MPI_Datatype recvtype, int root, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(5,7); OMPI_DECLSPEC int PMPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, - MPI_Request *request); + MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm); + int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, - MPI_Comm comm, MPI_Status *status); + MPI_Comm comm, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(6,8); OMPI_DECLSPEC int PMPI_Sendrecv_replace(void * buf, int count, MPI_Datatype datatype, int dest, int sendtag, int source, int recvtag, - MPI_Comm comm, MPI_Status *status); + MPI_Comm comm, MPI_Status *status) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Ssend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, - MPI_Request *request); + MPI_Request *request) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Ssend(void *buf, int count, MPI_Datatype datatype, int dest, - int tag, MPI_Comm comm); + int tag, MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,3); OMPI_DECLSPEC int PMPI_Start(MPI_Request *request); OMPI_DECLSPEC int PMPI_Startall(int count, MPI_Request *array_of_requests); OMPI_DECLSPEC int PMPI_Status_c2f(MPI_Status *c_status, MPI_Fint *f_status); @@ -2068,12 +2223,14 @@ MPI_Datatype oldtype, MPI_Datatype *newtype); OMPI_DECLSPEC int PMPI_Unpack(void *inbuf, int insize, int *position, void *outbuf, int outcount, MPI_Datatype datatype, - MPI_Comm comm); + MPI_Comm comm) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(4,6); OMPI_DECLSPEC int PMPI_Unpublish_name(char *service_name, MPI_Info info, char *port_name); OMPI_DECLSPEC int PMPI_Unpack_external (char *datarep, void *inbuf, MPI_Aint insize, MPI_Aint *position, void *outbuf, int outcount, - MPI_Datatype datatype); + MPI_Datatype datatype) + OMPI_ATTR_POINTER_WITH_TYPE_TAG(5,7); OMPI_DECLSPEC int PMPI_Waitall(int count, MPI_Request *array_of_requests, MPI_Status *array_of_statuses); OMPI_DECLSPEC int PMPI_Waitany(int count, MPI_Request *array_of_requests,