diff -uNr -x lt~obsolete.m4 -x ltdl.m4 -x libtool.m4 -x autogen_found_items.m4 -x argz.m4 -x aclocal.m4 -x romioconf.h.in -x py-compile -x ylwrap -x opal_get_version.sh -x missing -x install-sh -x Makefile.in -x compile -x depcomp -x config.guess -x config.sub -x '*ltmain*' -x configure /tmp/openmpi-1.9a1r27420/ompi/config/ompi_setup_mpi_fortran.m4 openmpi-1.9a1r27420/ompi/config/ompi_setup_mpi_fortran.m4
--- /tmp/openmpi-1.9a1r27420/ompi/config/ompi_setup_mpi_fortran.m4	2012-10-06 04:00:26.000000000 +0300
+++ openmpi-1.9a1r27420/ompi/config/ompi_setup_mpi_fortran.m4	2012-10-07 20:41:00.443786267 +0300
@@ -158,7 +158,7 @@
     OMPI_FORTRAN_CHECK([DOUBLE PRECISION], [yes],
                    [float, double, long double], [-1], [yes])
     
-    OMPI_FORTRAN_CHECK([COMPLEX], [yes], [float _Complex], [-1], [no])
+    OMPI_FORTRAN_CHECK([COMPLEX], [yes], [float _Complex], [-1], [yes])
 
     # The complex*N tests are a bit different (note: the complex tests are
     # the same as all the rest, because complex is a composite of two
@@ -171,22 +171,22 @@
     #    have a back-end C type for it)
     # b) compiler supports complex*N
     
-    OMPI_FORTRAN_CHECK([COMPLEX*4], [no], [float _Complex], [4], [no])
+    OMPI_FORTRAN_CHECK([COMPLEX*4], [no], [float _Complex], [4], [yes])
     OMPI_FORTRAN_CHECK([COMPLEX*8], [no], 
                    [float _Complex, double _Complex, long double _Complex],
-                   [8], [no])
+                   [8], [yes])
     OMPI_FORTRAN_CHECK([COMPLEX*16], [no], 
                    [float _Complex, double _Complex, long double _Complex], 
-                   [16], [no])
+                   [16], [yes])
     OMPI_FORTRAN_CHECK([COMPLEX*32], [no], 
                    [float _Complex, double _Complex, long double _Complex],
-                   [32], [no])
+                   [32], [yes])
     # Double precision complex types are not standard, but many
     # compilers support it.  Code should be wrapped with #ifdef
     # OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX
     OMPI_FORTRAN_CHECK([DOUBLE COMPLEX], [no],
                    [float _Complex, double _Complex, long double _Complex], 
-                   [-1], [no])
+                   [-1], [yes])
     
     # Regardless of whether we have fortran bindings, or even a
     # fortran compiler, get the max value for a fortran MPI handle
diff -uNr -x lt~obsolete.m4 -x ltdl.m4 -x libtool.m4 -x autogen_found_items.m4 -x argz.m4 -x aclocal.m4 -x romioconf.h.in -x py-compile -x ylwrap -x opal_get_version.sh -x missing -x install-sh -x Makefile.in -x compile -x depcomp -x config.guess -x config.sub -x '*ltmain*' -x configure /tmp/openmpi-1.9a1r27420/ompi/include/mpi.h.in openmpi-1.9a1r27420/ompi/include/mpi.h.in
--- /tmp/openmpi-1.9a1r27420/ompi/include/mpi.h.in	2012-10-06 04:00:07.000000000 +0300
+++ openmpi-1.9a1r27420/ompi/include/mpi.h.in	2012-10-07 20:33:13.683115794 +0300
@@ -88,6 +88,21 @@
 /* Maximum length of processor names (default is 256) */
 #undef OPAL_MAX_PROCESSOR_NAME
 
+/* Whether we have Fortran CHARACTER or not */
+#undef OMPI_HAVE_FORTRAN_CHARACTER
+
+/* Whether we have Fortran COMPLEX or not */
+#undef OMPI_HAVE_FORTRAN_COMPLEX
+
+/* Whether we have Fortran DOUBLE COMPLEX or not */
+#undef OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX
+
+/* Whether we have Fortran DOUBLE PRECISION or not */
+#undef OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
+
+/* Whether we have Fortran LOGICAL or not */
+#undef OMPI_HAVE_FORTRAN_LOGICAL
+
 /* Whether we have FORTRAN LOGICAL*1 or not */
 #undef OMPI_HAVE_FORTRAN_LOGICAL1
 
@@ -100,6 +115,9 @@
 /* Whether we have FORTRAN LOGICAL*8 or not */
 #undef OMPI_HAVE_FORTRAN_LOGICAL8
 
+/* Whether we have Fortran INTEGER or not */
+#undef OMPI_HAVE_FORTRAN_INTEGER
+
 /* Whether we have FORTRAN INTEGER*1 or not */
 #undef OMPI_HAVE_FORTRAN_INTEGER1
 
@@ -115,6 +133,9 @@
 /* Whether we have FORTRAN INTEGER*8 or not */
 #undef OMPI_HAVE_FORTRAN_INTEGER8
 
+/* Whether we have Fortran REAL or not */
+#undef OMPI_HAVE_FORTRAN_REAL
+
 /* Whether we have FORTRAN REAL*16 or not */
 #undef OMPI_HAVE_FORTRAN_REAL16
 
@@ -179,9 +200,82 @@
    valid */
 #undef ompi_fortran_bogus_type_t
 
-/* C type corresponding to FORTRAN INTEGER */
+/* A bogus type that allows us to have sentinel type values that are still
+   valid */
+#undef ompi_fortran_bogus_type_t
+
+/* C type corresponding to Fortran CHARACTER */
+#undef ompi_fortran_character_t
+
+/* C type corresponding to Fortran COMPLEX*16 */
+#undef ompi_fortran_complex16_t
+
+/* C type corresponding to Fortran COMPLEX*32 */
+#undef ompi_fortran_complex32_t
+
+/* C type corresponding to Fortran COMPLEX*4 */
+#undef ompi_fortran_complex4_t
+
+/* C type corresponding to Fortran COMPLEX*8 */
+#undef ompi_fortran_complex8_t
+
+/* C type corresponding to Fortran COMPLEX */
+#undef ompi_fortran_complex_t
+
+/* C type corresponding to Fortran DOUBLE COMPLEX */
+#undef ompi_fortran_double_complex_t
+
+/* C type corresponding to Fortran DOUBLE PRECISION */
+#undef ompi_fortran_double_precision_t
+
+/* C type corresponding to Fortran INTEGER*16 */
+#undef ompi_fortran_integer16_t
+
+/* C type corresponding to Fortran INTEGER*1 */
+#undef ompi_fortran_integer1_t
+
+/* C type corresponding to Fortran INTEGER*2 */
+#undef ompi_fortran_integer2_t
+
+/* C type corresponding to Fortran INTEGER*4 */
+#undef ompi_fortran_integer4_t
+
+/* C type corresponding to Fortran INTEGER*8 */
+#undef ompi_fortran_integer8_t
+
+/* C type corresponding to Fortran INTEGER */
 #undef ompi_fortran_integer_t
 
+/* C type corresponding to Fortran LOGICAL*1 */
+#undef ompi_fortran_logical1_t
+
+/* C type corresponding to Fortran LOGICAL*2 */
+#undef ompi_fortran_logical2_t
+
+/* C type corresponding to Fortran LOGICAL*4 */
+#undef ompi_fortran_logical4_t
+
+/* C type corresponding to Fortran LOGICAL*8 */
+#undef ompi_fortran_logical8_t
+
+/* C type corresponding to Fortran LOGICAL */
+#undef ompi_fortran_logical_t
+
+/* C type corresponding to Fortran REAL*16 */
+#undef ompi_fortran_real16_t
+
+/* C type corresponding to Fortran REAL*2 */
+#undef ompi_fortran_real2_t
+
+/* C type corresponding to Fortran REAL*4 */
+#undef ompi_fortran_real4_t
+
+/* C type corresponding to Fortran REAL*8 */
+#undef ompi_fortran_real8_t
+
+/* C type corresponding to Fortran REAL */
+#undef ompi_fortran_real_t
+
 /* Whether C compiler supports -fvisibility */
 #undef OPAL_C_HAVE_VISIBILITY
 
@@ -213,6 +307,60 @@
 
 /* @OMPI_END_CONFIGURE_SECTION@ */
 
+#if defined(__has_attribute)
+#  if __has_attribute(pointer_with_type_tag) && \
+      __has_attribute(type_tag_for_datatype) && \
+      !defined(OMPI_NO_ATTR_TYPE_TAGS)
+#    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)))
+#    include <stddef.h>
+#  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 not included, see if we can get it */
+#  if defined(__cplusplus)
+#    if __cplusplus >= 201103
+#      include <cstdint>
+#    endif
+#  endif
+#endif
+
+#if !defined(INT8_C)
+/* stdint.h was not included, see if we can get it */
+#  if defined(__STDC_VERSION__)
+#    if __STDC_VERSION__ >= 199901
+#      include <stdint.h>
+#    endif
+#  endif
+#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 defined(__STDC_VERSION__)
+#  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
+#else
+#  define OMPI_ATTR_TYPE_TAG_C99(type)
+#endif
+
 /* include for ptrdiff_t */
 #ifdef OPAL_STDC_HEADERS
 #include <stddef.h>
@@ -791,26 +939,26 @@
 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;
 
 /*
@@ -824,63 +972,201 @@
 /*
  * Following are the Fortran datatypes
  */
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_character;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_dblprec;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cplex;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_dblcplex;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical
+#if OMPI_HAVE_FORTRAN_LOGICAL
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_logical_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_character
+#if OMPI_HAVE_FORTRAN_CHARACTER
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_character_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer
+#if OMPI_HAVE_FORTRAN_INTEGER
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_integer_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real
+#if OMPI_HAVE_FORTRAN_REAL
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_real_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_dblprec
+#if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_double_precision_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cplex
+#if OMPI_HAVE_FORTRAN_COMPLEX
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_complex_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_dblcplex
+#if OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_double_complex_t)
+#endif
+  ;
 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;
-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_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);
+
+#if OMPI_HAVE_FORTRAN_INTEGER
+struct ompi_struct_mpi_2integer  { ompi_fortran_integer_t i1; ompi_fortran_integer_t i2; };
+#endif
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2integer
+#if OMPI_HAVE_FORTRAN_INTEGER
+  OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2integer)
+#endif
+  ;
+
+#if OMPI_HAVE_FORTRAN_REAL
+struct ompi_struct_mpi_2real     { ompi_fortran_real_t r1; ompi_fortran_real_t r2; };
+#endif
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2real
+#if OMPI_HAVE_FORTRAN_REAL
+  OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2real)
+#endif
+  ;
+
+#if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
+struct ompi_struct_mpi_2dblprec  { ompi_fortran_double_precision_t d1; ompi_fortran_double_precision_t d2; };
+#endif
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2dblprec
+#if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
+  OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2dblprec)
+#endif
+  ;
+
+#if OMPI_HAVE_FORTRAN_COMPLEX
+struct ompi_struct_mpi_2cplex    { ompi_fortran_complex_t c1; ompi_fortran_complex_t c2; };
+#endif
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2cplex
+#if OMPI_HAVE_FORTRAN_COMPLEX
+  OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2cplex)
+#endif
+  ;
+
+#if OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX
+struct ompi_struct_mpi_2dblcplex { ompi_fortran_double_complex_t c1; ompi_fortran_double_complex_t c2; };
+#endif
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2dblcplex
+#if OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX
+  OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2dblcplex)
+#endif
+  ;
+
+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_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_double_int);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_longdbl_int OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_longdbl_int);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_short_int   OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_short_int);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_long_int    OMPI_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(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;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical2;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical4;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical8;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer1;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer2;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer4;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer8;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer16;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real2;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real4;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real8;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real16;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_complex8;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_complex16;
-OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_complex32;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical1
+#if OMPI_HAVE_FORTRAN_LOGICAL1
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_logical1_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical2
+#if OMPI_HAVE_FORTRAN_LOGICAL2
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_logical2_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical4
+#if OMPI_HAVE_FORTRAN_LOGICAL4
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_logical4_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_logical8
+#if OMPI_HAVE_FORTRAN_LOGICAL8
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_logical8_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer1
+#if OMPI_HAVE_FORTRAN_INTEGER1
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_integer1_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer2
+#if OMPI_HAVE_FORTRAN_INTEGER2
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_integer2_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer4
+#if OMPI_HAVE_FORTRAN_INTEGER4
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_integer4_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer8
+#if OMPI_HAVE_FORTRAN_INTEGER8
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_integer8_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer16
+#if OMPI_HAVE_FORTRAN_INTEGER16
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_integer16_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real2
+#if OMPI_HAVE_FORTRAN_REAL2
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_real2_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real4
+#if OMPI_HAVE_FORTRAN_REAL4
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_real4_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real8
+#if OMPI_HAVE_FORTRAN_REAL8
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_real8_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real16
+#if OMPI_HAVE_FORTRAN_REAL16
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_real16_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_complex8
+#if OMPI_HAVE_FORTRAN_COMPLEX8
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_complex8_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_complex16
+#if OMPI_HAVE_FORTRAN_COMPLEX16
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_complex16_t)
+#endif
+  ;
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_complex32
+#if OMPI_HAVE_FORTRAN_COMPLEX32
+  OMPI_ATTR_TYPE_TAG(ompi_fortran_complex32_t)
+#endif
+  ;
 
 /* 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;
@@ -1049,7 +1335,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);
@@ -1057,34 +1344,54 @@
                                __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_Iallgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                                 void *recvbuf, int recvcount,
-                                 MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                  void *recvbuf, int recvcount,
+                                  MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                  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_Iallgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
                                   void *recvbuf, int recvcounts[],
-                                  int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                  int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                  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_Iallreduce(void *sendbuf, void *recvbuf, int count,
-                                 MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                                 MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                                 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_Ialltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                                void *recvbuf, int recvcount,
-                                MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                 void *recvbuf, int recvcount,
+                                 MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                 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_Ialltoallv(void *sendbuf, int sendcounts[], int sdispls[],
                                  MPI_Datatype sendtype, void *recvbuf, int recvcounts[],
-                                 int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                 int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                 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);
@@ -1100,14 +1407,17 @@
 OMPI_DECLSPEC  int MPI_Barrier(MPI_Comm comm);
 OMPI_DECLSPEC  int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request);
 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_Ibcast(void *buffer, int count, MPI_Datatype datatype,
-				                              int root, MPI_Comm comm,
-											  MPI_Request *request);
+                              int root, MPI_Comm comm, MPI_Request *request)
+                              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);
@@ -1181,9 +1491,13 @@
 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);
 OMPI_DECLSPEC  int MPI_Iexscan(void *sendbuf, void *recvbuf, int count,
-                              MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                               MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                               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);
@@ -1209,64 +1523,88 @@
                                      MPI_Datatype *etype,
                                      MPI_Datatype *filetype, char *datarep);
 OMPI_DECLSPEC  int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                    int count, MPI_Datatype datatype, MPI_Status *status);
+                                    int count, MPI_Datatype datatype, MPI_Status *status)
+                                    OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf,
-                                        int count, MPI_Datatype datatype, MPI_Status *status);
+                                        int count, MPI_Datatype datatype, MPI_Status *status)
+                                        OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                     int count, MPI_Datatype datatype, MPI_Status *status);
+                                     int count, MPI_Datatype datatype, MPI_Status *status)
+                                     OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf,
-                                         int count, MPI_Datatype datatype, MPI_Status *status);
+                                         int count, MPI_Datatype datatype, MPI_Status *status)
+                                         OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                     int count, MPI_Datatype datatype, MPI_Request *request);
+                                     int count, MPI_Datatype datatype, MPI_Request *request)
+                                     OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                      int count, MPI_Datatype datatype, MPI_Request *request);
+                                      int count, MPI_Datatype datatype, MPI_Request *request)
+                                      OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_read(MPI_File fh, void *buf, int count,
-                                 MPI_Datatype datatype, MPI_Status *status);
+                                 MPI_Datatype datatype, MPI_Status *status)
+                                 OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_read_all(MPI_File fh, void *buf, int count,
-                                     MPI_Datatype datatype, MPI_Status *status);
+                                     MPI_Datatype datatype, MPI_Status *status)
+                                     OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_write(MPI_File fh, void *buf, int count,
-                                  MPI_Datatype datatype, MPI_Status *status);
+                                  MPI_Datatype datatype, MPI_Status *status)
+                                  OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_write_all(MPI_File fh, void *buf, int count,
-                                      MPI_Datatype datatype, MPI_Status *status);
+                                      MPI_Datatype datatype, MPI_Status *status)
+                                      OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_iread(MPI_File fh, void *buf, int count,
-                                  MPI_Datatype datatype, MPI_Request *request);
+                                  MPI_Datatype datatype, MPI_Request *request)
+                                  OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_iwrite(MPI_File fh, void *buf, int count,
-                                   MPI_Datatype datatype, MPI_Request *request);
+                                   MPI_Datatype datatype, MPI_Request *request)
+                                   OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence);
 OMPI_DECLSPEC  int MPI_File_get_position(MPI_File fh, MPI_Offset *offset);
 OMPI_DECLSPEC  int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset,
                                             MPI_Offset *disp);
 OMPI_DECLSPEC  int MPI_File_read_shared(MPI_File fh, void *buf, int count,
-                                        MPI_Datatype datatype, MPI_Status *status);
+                                        MPI_Datatype datatype, MPI_Status *status)
+                                        OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_write_shared(MPI_File fh, void *buf, int count,
-					 MPI_Datatype datatype, MPI_Status *status);
+                                         MPI_Datatype datatype, MPI_Status *status)
+                                         OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_iread_shared(MPI_File fh, void *buf, int count,
-                                         MPI_Datatype datatype, MPI_Request *request);
+                                         MPI_Datatype datatype, MPI_Request *request)
+                                         OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_iwrite_shared(MPI_File fh, void *buf, int count,
-                                          MPI_Datatype datatype, MPI_Request *request);
+                                          MPI_Datatype datatype, MPI_Request *request)
+                                          OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_read_ordered(MPI_File fh, void *buf, int count,
-                                         MPI_Datatype datatype, MPI_Status *status);
+                                         MPI_Datatype datatype, MPI_Status *status)
+                                         OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_write_ordered(MPI_File fh, void *buf, int count,
-                                          MPI_Datatype datatype, MPI_Status *status);
+                                          MPI_Datatype datatype, MPI_Status *status)
+                                          OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence);
 OMPI_DECLSPEC  int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset);
 OMPI_DECLSPEC  int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
-                                              int count, MPI_Datatype datatype);
+                                              int count, MPI_Datatype datatype)
+                                              OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
-                                               int count, MPI_Datatype datatype);
+                                               int count, MPI_Datatype datatype)
+                                               OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int MPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int MPI_File_read_all_begin(MPI_File fh, void *buf, int count,
-                                           MPI_Datatype datatype);
+                                           MPI_Datatype datatype)
+                                           OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int MPI_File_write_all_begin(MPI_File fh, void *buf, int count,
-                                            MPI_Datatype datatype);
+                                            MPI_Datatype datatype)
+                                            OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count,
-                                               MPI_Datatype datatype);
+                                               MPI_Datatype datatype)
+                                               OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int MPI_File_write_ordered_begin(MPI_File fh, void *buf, int count,
-                                                MPI_Datatype datatype);
+                                                MPI_Datatype datatype)
+                                                OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype,
                                             MPI_Aint *extent);
@@ -1279,23 +1617,32 @@
 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_Igather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                              void *recvbuf, int recvcount, MPI_Datatype recvtype,
-                              int root, MPI_Comm comm, MPI_Request *request);
+                               void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                               int root, MPI_Comm comm, MPI_Request *request)
+                               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_Igatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                               void *recvbuf, int recvcounts[], int displs[],
-                               MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request);
+                                void *recvbuf, int recvcounts[], int displs[],
+                                MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request)
+                                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);
@@ -1337,12 +1684,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);
@@ -1368,13 +1717,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,
@@ -1389,7 +1742,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);
@@ -1398,11 +1752,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, ...);
@@ -1411,26 +1767,43 @@
                                     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_Ireduce(void *sendbuf, void *recvbuf, int count,
-                              MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request);
+                               MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
+                               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_Ireduce_scatter(void *sendbuf, void *recvbuf, int recvcounts[],
-                                      MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                                      MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                                      OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4)
+                                      OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int MPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
-                                      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_Ireduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
-                                      MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                                      MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                                      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,
@@ -1442,43 +1815,64 @@
 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_Iscan(void *sendbuf, void *recvbuf, int count,
-                            MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                            MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                            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_Iscatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                               void *recvbuf, int recvcount, MPI_Datatype recvtype,
-                               int root, MPI_Comm comm, MPI_Request *request);
+                                void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                                int root, MPI_Comm comm, MPI_Request *request)
+                                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_Iscatterv(void *sendbuf, int sendcounts[], int displs[],
                                 MPI_Datatype sendtype, void *recvbuf, int recvcount,
-                                MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request);
+                                MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request)
+                                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);
@@ -1586,11 +1980,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[],
@@ -1638,7 +2034,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);
@@ -1646,34 +2043,54 @@
                                 __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_Iallgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
                                   void *recvbuf, int recvcount,
-                                  MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                  MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                  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_Iallgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                                   void *recvbuf, int recvcounts[],
-                                   int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                    void *recvbuf, int recvcounts[],
+                                    int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                    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_Iallreduce(void *sendbuf, void *recvbuf, int count,
-                                  MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                                   MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                                   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_Ialltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                                 void *recvbuf, int recvcount,
-                                 MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                  void *recvbuf, int recvcount,
+                                  MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                  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_Ialltoallv(void *sendbuf, int sendcounts[], int sdispls[],
-                                  MPI_Datatype sendtype, void *recvbuf, int recvcounts[],
-                                  int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request);
+                                   MPI_Datatype sendtype, void *recvbuf, int recvcounts[],
+                                   int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                                   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);
@@ -1689,14 +2106,18 @@
 OMPI_DECLSPEC  int PMPI_Barrier(MPI_Comm comm);
 OMPI_DECLSPEC  int PMPI_Ibarrier(MPI_Comm comm, MPI_Request *request);
 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_Ibcast(void *buffer, int count, MPI_Datatype datatype,
-				                              int root, MPI_Comm comm,
-											  MPI_Request *request);
+                               int root, MPI_Comm comm,
+                               MPI_Request *request)
+                               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);
@@ -1770,9 +2191,13 @@
 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);
 OMPI_DECLSPEC  int PMPI_Iexscan(void *sendbuf, void *recvbuf, int count,
-                               MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                                MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                                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);
@@ -1798,64 +2223,88 @@
                                       MPI_Datatype *etype,
                                       MPI_Datatype *filetype, char *datarep);
 OMPI_DECLSPEC  int PMPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                     int count, MPI_Datatype datatype, MPI_Status *status);
+                                     int count, MPI_Datatype datatype, MPI_Status *status)
+                                     OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf,
-                                         int count, MPI_Datatype datatype, MPI_Status *status);
+                                         int count, MPI_Datatype datatype, MPI_Status *status)
+                                         OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                      int count, MPI_Datatype datatype, MPI_Status *status);
+                                      int count, MPI_Datatype datatype, MPI_Status *status)
+                                      OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf,
-                                          int count, MPI_Datatype datatype, MPI_Status *status);
+                                          int count, MPI_Datatype datatype, MPI_Status *status)
+                                          OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                      int count, MPI_Datatype datatype, MPI_Request *request);
+                                      int count, MPI_Datatype datatype, MPI_Request *request)
+                                      OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf,
-                                       int count, MPI_Datatype datatype, MPI_Request *request);
+                                       int count, MPI_Datatype datatype, MPI_Request *request)
+                                       OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_read(MPI_File fh, void *buf, int count,
-                                  MPI_Datatype datatype, MPI_Status *status);
+                                  MPI_Datatype datatype, MPI_Status *status)
+                                  OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_read_all(MPI_File fh, void *buf, int count,
-                                      MPI_Datatype datatype, MPI_Status *status);
+                                      MPI_Datatype datatype, MPI_Status *status)
+                                      OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_write(MPI_File fh, void *buf, int count,
-                                   MPI_Datatype datatype, MPI_Status *status);
+                                   MPI_Datatype datatype, MPI_Status *status)
+                                   OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_write_all(MPI_File fh, void *buf, int count,
-                                       MPI_Datatype datatype, MPI_Status *status);
+                                       MPI_Datatype datatype, MPI_Status *status)
+                                       OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_iread(MPI_File fh, void *buf, int count,
-                                   MPI_Datatype datatype, MPI_Request *request);
+                                   MPI_Datatype datatype, MPI_Request *request)
+                                   OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_iwrite(MPI_File fh, void *buf, int count,
-                                    MPI_Datatype datatype, MPI_Request *request);
+                                    MPI_Datatype datatype, MPI_Request *request)
+                                    OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_seek(MPI_File fh, MPI_Offset offset, int whence);
 OMPI_DECLSPEC  int PMPI_File_get_position(MPI_File fh, MPI_Offset *offset);
 OMPI_DECLSPEC  int PMPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset,
                                              MPI_Offset *disp);
 OMPI_DECLSPEC  int PMPI_File_read_shared(MPI_File fh, void *buf, int count,
-                                         MPI_Datatype datatype, MPI_Status *status);
+                                         MPI_Datatype datatype, MPI_Status *status)
+                                         OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_write_shared(MPI_File fh, void *buf, int count,
-                                          MPI_Datatype datatype, MPI_Status *status);
+                                          MPI_Datatype datatype, MPI_Status *status)
+                                          OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_iread_shared(MPI_File fh, void *buf, int count,
-                                          MPI_Datatype datatype, MPI_Request *request);
+                                          MPI_Datatype datatype, MPI_Request *request)
+                                          OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_iwrite_shared(MPI_File fh, void *buf, int count,
-                                           MPI_Datatype datatype, MPI_Request *request);
+                                           MPI_Datatype datatype, MPI_Request *request)
+                                           OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_read_ordered(MPI_File fh, void *buf, int count,
-                                          MPI_Datatype datatype, MPI_Status *status);
+                                          MPI_Datatype datatype, MPI_Status *status)
+                                          OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_write_ordered(MPI_File fh, void *buf, int count,
-                                           MPI_Datatype datatype, MPI_Status *status);
+                                           MPI_Datatype datatype, MPI_Status *status)
+                                           OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence);
 OMPI_DECLSPEC  int PMPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset);
 OMPI_DECLSPEC  int PMPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
-                                               int count, MPI_Datatype datatype);
+                                               int count, MPI_Datatype datatype)
+                                               OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int PMPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf,
-                                                int count, MPI_Datatype datatype);
+                                                int count, MPI_Datatype datatype)
+                                                OMPI_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 OMPI_DECLSPEC  int PMPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int PMPI_File_read_all_begin(MPI_File fh, void *buf, int count,
-                                            MPI_Datatype datatype);
+                                            MPI_Datatype datatype)
+                                            OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int PMPI_File_write_all_begin(MPI_File fh, void *buf, int count,
-                                             MPI_Datatype datatype);
+                                             MPI_Datatype datatype)
+                                             OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int PMPI_File_read_ordered_begin(MPI_File fh, void *buf, int count,
-                                                MPI_Datatype datatype);
+                                                MPI_Datatype datatype)
+                                                OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int PMPI_File_write_ordered_begin(MPI_File fh, void *buf, int count,
-                                                 MPI_Datatype datatype);
+                                                 MPI_Datatype datatype)
+                                                 OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
 OMPI_DECLSPEC  int PMPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype,
                                              MPI_Aint *extent);
@@ -1868,16 +2317,24 @@
 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_Igather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                               void *recvbuf, int recvcount, MPI_Datatype recvtype,
-                               int root, MPI_Comm comm, MPI_Request *request);
+                                void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                                int root, MPI_Comm comm, MPI_Request *request)
+                                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_Igatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                                void *recvbuf, int recvcounts[], int displs[],
-                                MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request);
+                                 void *recvbuf, int recvcounts[], int displs[],
+                                 MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request)
+                                 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,
@@ -1885,7 +2342,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);
@@ -1927,12 +2385,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);
@@ -1958,13 +2418,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,
@@ -1979,7 +2443,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);
@@ -1988,11 +2453,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, ...);
@@ -2001,26 +2468,43 @@
                                      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_Ireduce(void *sendbuf, void *recvbuf, int count,
-                               MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request);
+                                MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
+                                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_Ireduce_scatter(void *sendbuf, void *recvbuf, int recvcounts[],
-                                        MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                                        MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                                        OMPI_ATTR_POINTER_WITH_TYPE_TAG(1,4)
+                                        OMPI_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 OMPI_DECLSPEC  int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
-                                             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_Ireduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
-                                              MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                                              MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                                              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,
@@ -2032,43 +2516,64 @@
 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_Iscan(void *sendbuf, void *recvbuf, int count,
-                             MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request);
+                              MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                              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_Iscatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
-                                void *recvbuf, int recvcount, MPI_Datatype recvtype,
-                                int root, MPI_Comm comm, MPI_Request *request);
+                                 void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                                 int root, MPI_Comm comm, MPI_Request *request)
+                                 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_Iscatterv(void *sendbuf, int sendcounts[], int displs[],
-                                 MPI_Datatype sendtype, void *recvbuf, int recvcount,
-                                 MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request);
+                                  MPI_Datatype sendtype, void *recvbuf, int recvcount,
+                                  MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request)
+                                  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);
@@ -2175,12 +2680,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[],
Binary files /tmp/openmpi-1.9a1r27420/ompi/include/.mpi.h.in.swp and openmpi-1.9a1r27420/ompi/include/.mpi.h.in.swp differ
diff -uNr -x lt~obsolete.m4 -x ltdl.m4 -x libtool.m4 -x autogen_found_items.m4 -x argz.m4 -x aclocal.m4 -x romioconf.h.in -x py-compile -x ylwrap -x opal_get_version.sh -x missing -x install-sh -x Makefile.in -x compile -x depcomp -x config.guess -x config.sub -x '*ltmain*' -x configure /tmp/openmpi-1.9a1r27420/ompi/include/ompi_config.h.in openmpi-1.9a1r27420/ompi/include/ompi_config.h.in
--- /tmp/openmpi-1.9a1r27420/ompi/include/ompi_config.h.in	2012-10-06 04:13:25.000000000 +0300
+++ openmpi-1.9a1r27420/ompi/include/ompi_config.h.in	2012-10-07 21:11:09.137586026 +0300
@@ -43,7 +43,7 @@
 typedef struct {
   ompi_fortran_real_t real;
   ompi_fortran_real_t imag;
-} ompi_fortran_complex_t;
+} ompi_fortran_complex_struct_t;
 #endif
 
 #if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
@@ -51,7 +51,7 @@
 typedef struct {
   ompi_fortran_real4_t real;
   ompi_fortran_real4_t imag;
-} ompi_fortran_complex8_t;
+} ompi_fortran_complex8_struct_t;
 #endif
 
 #if OMPI_HAVE_FORTRAN_REAL8 && OMPI_HAVE_FORTRAN_COMPLEX16
@@ -59,7 +59,7 @@
 typedef struct {
   ompi_fortran_real8_t real;
   ompi_fortran_real8_t imag;
-} ompi_fortran_complex16_t;
+} ompi_fortran_complex16_struct_t;
 #endif
 
 #if OMPI_HAVE_FORTRAN_REAL16 && OMPI_HAVE_FORTRAN_COMPLEX32
@@ -67,7 +67,7 @@
 typedef struct {
   ompi_fortran_real16_t real;
   ompi_fortran_real16_t imag;
-} ompi_fortran_complex32_t;
+} ompi_fortran_complex32_struct_t;
 #endif
 
 #if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
@@ -75,7 +75,7 @@
 typedef struct {
   ompi_fortran_double_precision_t real;
   ompi_fortran_double_precision_t imag;
-} ompi_fortran_double_complex_t;
+} ompi_fortran_double_complex_struct_t;
 #endif
 
 
diff -uNr -x lt~obsolete.m4 -x ltdl.m4 -x libtool.m4 -x autogen_found_items.m4 -x argz.m4 -x aclocal.m4 -x romioconf.h.in -x py-compile -x ylwrap -x opal_get_version.sh -x missing -x install-sh -x Makefile.in -x compile -x depcomp -x config.guess -x config.sub -x '*ltmain*' -x configure /tmp/openmpi-1.9a1r27420/ompi/mca/op/base/op_base_functions.c openmpi-1.9a1r27420/ompi/mca/op/base/op_base_functions.c
--- /tmp/openmpi-1.9a1r27420/ompi/mca/op/base/op_base_functions.c	2012-10-06 04:00:26.000000000 +0300
+++ openmpi-1.9a1r27420/ompi/mca/op/base/op_base_functions.c	2012-10-07 21:02:33.107913765 +0300
@@ -308,19 +308,19 @@
 #endif
 /* Complex */
 #if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_SUM(fortran_complex, ompi_fortran_complex_t)
+COMPLEX_OP_FUNC_SUM(fortran_complex, ompi_fortran_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_SUM(fortran_double_complex, ompi_fortran_double_complex_t)
+COMPLEX_OP_FUNC_SUM(fortran_double_complex, ompi_fortran_double_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
-COMPLEX_OP_FUNC_SUM(fortran_complex8, ompi_fortran_complex8_t)
+COMPLEX_OP_FUNC_SUM(fortran_complex8, ompi_fortran_complex8_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL8 && OMPI_HAVE_FORTRAN_COMPLEX16
-COMPLEX_OP_FUNC_SUM(fortran_complex16, ompi_fortran_complex16_t)
+COMPLEX_OP_FUNC_SUM(fortran_complex16, ompi_fortran_complex16_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL16 && OMPI_HAVE_FORTRAN_COMPLEX32
-COMPLEX_OP_FUNC_SUM(fortran_complex32, ompi_fortran_complex32_t)
+COMPLEX_OP_FUNC_SUM(fortran_complex32, ompi_fortran_complex32_struct_t)
 #endif
 
 /*************************************************************************
@@ -381,19 +381,19 @@
 #endif
 /* Complex */
 #if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_PROD(fortran_complex, ompi_fortran_complex_t)
+COMPLEX_OP_FUNC_PROD(fortran_complex, ompi_fortran_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_PROD(fortran_double_complex, ompi_fortran_double_complex_t)
+COMPLEX_OP_FUNC_PROD(fortran_double_complex, ompi_fortran_double_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
-COMPLEX_OP_FUNC_PROD(fortran_complex8, ompi_fortran_complex8_t)
+COMPLEX_OP_FUNC_PROD(fortran_complex8, ompi_fortran_complex8_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL8 && OMPI_HAVE_FORTRAN_COMPLEX16
-COMPLEX_OP_FUNC_PROD(fortran_complex16, ompi_fortran_complex16_t)
+COMPLEX_OP_FUNC_PROD(fortran_complex16, ompi_fortran_complex16_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL16 && OMPI_HAVE_FORTRAN_COMPLEX32
-COMPLEX_OP_FUNC_PROD(fortran_complex32, ompi_fortran_complex32_t)
+COMPLEX_OP_FUNC_PROD(fortran_complex32, ompi_fortran_complex32_struct_t)
 #endif
 
 /*************************************************************************
@@ -933,19 +933,19 @@
 #endif
 /* Complex */
 #if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex, ompi_fortran_complex_t)
+COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex, ompi_fortran_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_SUM_3BUF(fortran_double_complex, ompi_fortran_double_complex_t)
+COMPLEX_OP_FUNC_SUM_3BUF(fortran_double_complex, ompi_fortran_double_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
-COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex8, ompi_fortran_complex8_t)
+COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex8, ompi_fortran_complex8_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL8 && OMPI_HAVE_FORTRAN_COMPLEX16
-COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex16, ompi_fortran_complex16_t)
+COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex16, ompi_fortran_complex16_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL16 && OMPI_HAVE_FORTRAN_COMPLEX32
-COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex32, ompi_fortran_complex32_t)
+COMPLEX_OP_FUNC_SUM_3BUF(fortran_complex32, ompi_fortran_complex32_struct_t)
 #endif
 
 /*************************************************************************
@@ -1006,19 +1006,19 @@
 #endif
 /* Complex */
 #if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex, ompi_fortran_complex_t)
+COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex, ompi_fortran_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION && OMPI_HAVE_FORTRAN_COMPLEX
-COMPLEX_OP_FUNC_PROD_3BUF(fortran_double_complex, ompi_fortran_double_complex_t)
+COMPLEX_OP_FUNC_PROD_3BUF(fortran_double_complex, ompi_fortran_double_complex_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
-COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex8, ompi_fortran_complex8_t)
+COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex8, ompi_fortran_complex8_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL8 && OMPI_HAVE_FORTRAN_COMPLEX16
-COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex16, ompi_fortran_complex16_t)
+COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex16, ompi_fortran_complex16_struct_t)
 #endif
 #if OMPI_HAVE_FORTRAN_REAL16 && OMPI_HAVE_FORTRAN_COMPLEX32
-COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex32, ompi_fortran_complex32_t)
+COMPLEX_OP_FUNC_PROD_3BUF(fortran_complex32, ompi_fortran_complex32_struct_t)
 #endif
 
 /*************************************************************************
