Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

- Redistributions of source code must retain the above copyright
  notice, this list of conditions and the following disclaimer.

- Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimer listed
  in this license in the documentation and/or other materials
  provided with the distribution.

- Neither the name of the copyright holders nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

The copyright holders provide no reassurances that the source code
provided does not infringe any patent, copyright, or any other
intellectual property rights of third parties.  The copyright holders
disclaim any liability to any recipient for claims brought against
recipient by any third party for infringement of that parties
intellectual property rights.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

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-20 00:50:28.143010320 +0300
@@ -88,6 +88,23 @@
 /* Maximum length of processor names (default is 256) */
 #undef OPAL_MAX_PROCESSOR_NAME
 
+/* Whether we will build the MPI Fortran mpif.h bindings or not */
+#undef OMPI_BUILD_FORTRAN_MPIFH_BINDINGS
+
+/* For ompi_info: Whether we will build the MPI Fortran "use mpi_f08" bindings
+   or not */
+#undef OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS
+
+/* Whether we will build the MPI Fortran "use mpi" bindings or not */
+#undef OMPI_BUILD_FORTRAN_USEMPI_BINDINGS
+
+/* Convenience */
+#if OMPI_BUILD_FORTRAN_MPIFH_BINDINGS || OMPI_BUILD_FORTRAN_USEMPI_BINDINGS || OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS
+#define OMPI_BUILD_FORTRAN_BINDINGS 1
+#else
+#define OMPI_BUILD_FORTRAN_BINDINGS 0
+#endif
+
 /* Whether we have FORTRAN LOGICAL*1 or not */
 #undef OMPI_HAVE_FORTRAN_LOGICAL1
 
@@ -179,9 +196,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 +303,68 @@
 
 /* @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
+
+#if OMPI_BUILD_FORTRAN_BINDINGS
+#  define OMPI_ATTR_TYPE_TAG_FORTRAN(type) OMPI_ATTR_TYPE_TAG(type)
+#  define OMPI_ATTR_TYPE_TAG_FORTRAN_LAYOUT_COMPATIBLE(type) OMPI_ATTR_TYPE_TAG(type)
+#else
+#  define OMPI_ATTR_TYPE_TAG_FORTRAN(type)
+#  define OMPI_ATTR_TYPE_TAG_FORTRAN_LAYOUT_COMPATIBLE(type)
+#endif
+
 /* include for ptrdiff_t */
 #ifdef OPAL_STDC_HEADERS
 #include <stddef.h>
@@ -791,26 +943,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 +976,141 @@
 /*
  * 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   OMPI_ATTR_TYPE_TAG_FORTRAN(ompi_fortran_logical_t);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_character OMPI_ATTR_TYPE_TAG_FORTRAN(ompi_fortran_character_t);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_integer   OMPI_ATTR_TYPE_TAG_FORTRAN(ompi_fortran_integer_t);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_real      OMPI_ATTR_TYPE_TAG_FORTRAN(ompi_fortran_real_t);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_dblprec   OMPI_ATTR_TYPE_TAG_FORTRAN(ompi_fortran_double_precision_t);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_cplex     OMPI_ATTR_TYPE_TAG_FORTRAN(ompi_fortran_complex_t);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_dblcplex  OMPI_ATTR_TYPE_TAG_FORTRAN(ompi_fortran_double_complex_t);
 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_BUILD_FORTRAN_BINDINGS
+struct ompi_struct_mpi_2integer  { ompi_fortran_integer_t i1; ompi_fortran_integer_t i2; };
+struct ompi_struct_mpi_2real     { ompi_fortran_real_t r1; ompi_fortran_real_t r2; };
+struct ompi_struct_mpi_2dblprec  { ompi_fortran_double_precision_t d1; ompi_fortran_double_precision_t d2; };
+struct ompi_struct_mpi_2cplex    { ompi_fortran_complex_t c1; ompi_fortran_complex_t c2; };
+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_2integer  OMPI_ATTR_TYPE_TAG_FORTRAN_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2integer);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2real     OMPI_ATTR_TYPE_TAG_FORTRAN_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2real);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2dblprec  OMPI_ATTR_TYPE_TAG_FORTRAN_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2dblprec);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2cplex    OMPI_ATTR_TYPE_TAG_FORTRAN_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2cplex);
+OMPI_DECLSPEC extern struct ompi_predefined_datatype_t ompi_mpi_2dblcplex OMPI_ATTR_TYPE_TAG_FORTRAN_LAYOUT_COMPATIBLE(struct ompi_struct_mpi_2dblcplex);
+
+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 +1279,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 +1288,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 +1351,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 +1435,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 +1467,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 +1561,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 +1628,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 +1661,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 +1686,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 +1696,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 +1711,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 +1759,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 +1924,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 +1978,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 +1987,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 +2050,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 +2135,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 +2167,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 +2261,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 +2286,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 +2329,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 +2362,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 +2387,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 +2397,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 +2412,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 +2460,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 +2624,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[],
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-20 01:05:42.185462809 +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
 
 /*************************************************************************
