1
1

Patch from Number Cruncher/Simon to shut up gcc 4.1's complaints about

type punning.  A description of the issue is in the comment included
in this commit.

This commit was SVN r21166.
Этот коммит содержится в:
Jeff Squyres 2009-05-05 16:41:26 +00:00
родитель 7663fb47f0
Коммит 4e4d3b2ec1

Просмотреть файл

@ -192,6 +192,22 @@
#define MPIO_Wait MPI_Wait
#endif
/*
* When initializing global pointers to Open MPI internally-defined
* structs, some compilers warn about type-punning to incomplete
* types. Therefore, when full struct definitions are unavailable
* (when not building Open MPI), cast to an opaque (void *) pointer to
* disable any strict-aliasing optimizations. Don't cast to (void *)
* when building Open MPI so that we actually get the benefit of type
* checking (because we *do* have the full type definitions available
* when building OMPI).
*/
#if !OMPI_BUILDING
#define OMPI_PREDEFINED_GLOBAL(type, global) ((type) ((void *) &(global)))
#else
#define OMPI_PREDEFINED_GLOBAL(type, global) ((type) &(global))
#endif
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {
#endif
@ -480,15 +496,15 @@ enum {
/*
* NULL handles
*/
#define MPI_GROUP_NULL (((MPI_Group)&(ompi_mpi_group_null)))
#define MPI_COMM_NULL (((MPI_Comm)&(ompi_mpi_comm_null)))
#define MPI_REQUEST_NULL (((MPI_Request)&(ompi_request_null)))
#define MPI_OP_NULL (((MPI_Op)&(ompi_mpi_op_null)))
#define MPI_ERRHANDLER_NULL (((MPI_Errhandler)&(ompi_mpi_errhandler_null)))
#define MPI_INFO_NULL (((MPI_Info)&(ompi_mpi_info_null)))
#define MPI_WIN_NULL (((MPI_Win)&(ompi_mpi_win_null)))
#define MPI_GROUP_NULL OMPI_PREDEFINED_GLOBAL(MPI_Group, ompi_mpi_group_null)
#define MPI_COMM_NULL OMPI_PREDEFINED_GLOBAL(MPI_Comm, ompi_mpi_comm_null)
#define MPI_REQUEST_NULL OMPI_PREDEFINED_GLOBAL(MPI_Request, ompi_request_null)
#define MPI_OP_NULL OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_null)
#define MPI_ERRHANDLER_NULL OMPI_PREDEFINED_GLOBAL(MPI_Errhandler, ompi_mpi_errhandler_null)
#define MPI_INFO_NULL OMPI_PREDEFINED_GLOBAL(MPI_Info, ompi_mpi_info_null)
#define MPI_WIN_NULL OMPI_PREDEFINED_GLOBAL(MPI_Win, ompi_mpi_win_null)
#if OMPI_PROVIDE_MPI_FILE_INTERFACE
#define MPI_FILE_NULL (((MPI_File)&(ompi_mpi_file_null)))
#define MPI_FILE_NULL OMPI_PREDEFINED_GLOBAL(MPI_File, ompi_mpi_file_null)
#endif
#define MPI_STATUS_IGNORE ((MPI_Status *) 0)
@ -716,117 +732,117 @@ OMPI_DECLSPEC extern MPI_Fint *MPI_F_STATUSES_IGNORE;
/*
* MPI predefined handles
*/
#define MPI_COMM_WORLD (((MPI_Comm)&(ompi_mpi_comm_world)))
#define MPI_COMM_SELF (((MPI_Comm)&(ompi_mpi_comm_self)))
#define MPI_COMM_WORLD OMPI_PREDEFINED_GLOBAL( MPI_Comm, ompi_mpi_comm_world)
#define MPI_COMM_SELF OMPI_PREDEFINED_GLOBAL(MPI_Comm, ompi_mpi_comm_self)
#define MPI_GROUP_EMPTY (((MPI_Group)&(ompi_mpi_group_empty)))
#define MPI_GROUP_EMPTY OMPI_PREDEFINED_GLOBAL(MPI_Group, ompi_mpi_group_empty)
#define MPI_MAX (((MPI_Op)&(ompi_mpi_op_max)))
#define MPI_MIN (((MPI_Op)&(ompi_mpi_op_min)))
#define MPI_SUM (((MPI_Op)&(ompi_mpi_op_sum)))
#define MPI_PROD (((MPI_Op)&(ompi_mpi_op_prod)))
#define MPI_LAND (((MPI_Op)&(ompi_mpi_op_land)))
#define MPI_BAND (((MPI_Op)&(ompi_mpi_op_band)))
#define MPI_LOR (((MPI_Op)&(ompi_mpi_op_lor)))
#define MPI_BOR (((MPI_Op)&(ompi_mpi_op_bor)))
#define MPI_LXOR (((MPI_Op)&(ompi_mpi_op_lxor)))
#define MPI_BXOR (((MPI_Op)&(ompi_mpi_op_bxor)))
#define MPI_MAXLOC (((MPI_Op)&(ompi_mpi_op_maxloc)))
#define MPI_MINLOC (((MPI_Op)&(ompi_mpi_op_minloc)))
#define MPI_REPLACE (((MPI_Op)&(ompi_mpi_op_replace)))
#define MPI_MAX OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_max)
#define MPI_MIN OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_min)
#define MPI_SUM OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_sum)
#define MPI_PROD OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_prod)
#define MPI_LAND OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_land)
#define MPI_BAND OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_band)
#define MPI_LOR OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_lor)
#define MPI_BOR OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_bor)
#define MPI_LXOR OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_lxor)
#define MPI_BXOR OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_bxor)
#define MPI_MAXLOC OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_maxloc)
#define MPI_MINLOC OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_minloc)
#define MPI_REPLACE OMPI_PREDEFINED_GLOBAL(MPI_Op, ompi_mpi_op_replace)
/* C datatypes */
#define MPI_DATATYPE_NULL (((MPI_Datatype)&(ompi_mpi_datatype_null)))
#define MPI_BYTE (((MPI_Datatype)&(ompi_mpi_byte)))
#define MPI_PACKED (((MPI_Datatype)&(ompi_mpi_packed)))
#define MPI_CHAR (((MPI_Datatype)&(ompi_mpi_char)))
#define MPI_SHORT (((MPI_Datatype)&(ompi_mpi_short)))
#define MPI_INT (((MPI_Datatype)&(ompi_mpi_int)))
#define MPI_LONG (((MPI_Datatype)&(ompi_mpi_long)))
#define MPI_FLOAT (((MPI_Datatype)&(ompi_mpi_float)))
#define MPI_DOUBLE (((MPI_Datatype)&(ompi_mpi_double)))
#define MPI_LONG_DOUBLE (((MPI_Datatype)&(ompi_mpi_long_double)))
#define MPI_UNSIGNED_CHAR (((MPI_Datatype)&(ompi_mpi_unsigned_char)))
#define MPI_SIGNED_CHAR (((MPI_Datatype)&(ompi_mpi_signed_char)))
#define MPI_UNSIGNED_SHORT (((MPI_Datatype)&(ompi_mpi_unsigned_short)))
#define MPI_UNSIGNED_LONG (((MPI_Datatype)&(ompi_mpi_unsigned_long)))
#define MPI_UNSIGNED (((MPI_Datatype)&(ompi_mpi_unsigned)))
#define MPI_FLOAT_INT (((MPI_Datatype)&(ompi_mpi_float_int)))
#define MPI_DOUBLE_INT (((MPI_Datatype)&(ompi_mpi_double_int)))
#define MPI_LONG_DOUBLE_INT (((MPI_Datatype)&(ompi_mpi_longdbl_int)))
#define MPI_LONG_INT (((MPI_Datatype)&(ompi_mpi_long_int)))
#define MPI_SHORT_INT (((MPI_Datatype)&(ompi_mpi_short_int)))
#define MPI_2INT (((MPI_Datatype)&(ompi_mpi_2int)))
#define MPI_UB (((MPI_Datatype)&(ompi_mpi_ub)))
#define MPI_LB (((MPI_Datatype)&(ompi_mpi_lb)))
#define MPI_WCHAR (((MPI_Datatype)&(ompi_mpi_wchar)))
#define MPI_DATATYPE_NULL OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_datatype_null)
#define MPI_BYTE OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_byte)
#define MPI_PACKED OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_packed)
#define MPI_CHAR OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_char)
#define MPI_SHORT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_short)
#define MPI_INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_int)
#define MPI_LONG OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_long)
#define MPI_FLOAT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_float)
#define MPI_DOUBLE OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_double)
#define MPI_LONG_DOUBLE OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_long_double)
#define MPI_UNSIGNED_CHAR OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_unsigned_char)
#define MPI_SIGNED_CHAR OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_signed_char)
#define MPI_UNSIGNED_SHORT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_unsigned_short)
#define MPI_UNSIGNED_LONG OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_unsigned_long)
#define MPI_UNSIGNED OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_unsigned)
#define MPI_FLOAT_INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_float_int)
#define MPI_DOUBLE_INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_double_int)
#define MPI_LONG_DOUBLE_INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_longdbl_int)
#define MPI_LONG_INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_long_int)
#define MPI_SHORT_INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_short_int)
#define MPI_2INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_2int)
#define MPI_UB OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_ub)
#define MPI_LB OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_lb)
#define MPI_WCHAR OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_wchar)
#if OMPI_HAVE_LONG_LONG
#define MPI_LONG_LONG_INT (((MPI_Datatype)&(ompi_mpi_long_long_int)))
#define MPI_LONG_LONG (((MPI_Datatype)&(ompi_mpi_long_long_int)))
#define MPI_UNSIGNED_LONG_LONG (((MPI_Datatype)&(ompi_mpi_unsigned_long_long)))
#define MPI_LONG_LONG_INT OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_long_long_int)
#define MPI_LONG_LONG OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_long_long_int)
#define MPI_UNSIGNED_LONG_LONG OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_unsigned_long_long)
#endif /* OMPI_HAVE_LONG_LONG */
#define MPI_2COMPLEX (((MPI_Datatype)&(ompi_mpi_2cplex)))
#define MPI_2DOUBLE_COMPLEX (((MPI_Datatype)&(ompi_mpi_2dblcplex)))
#define MPI_2COMPLEX OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_2cplex)
#define MPI_2DOUBLE_COMPLEX OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_2dblcplex)
/* Fortran datatype bindings */
#define MPI_CHARACTER (((MPI_Datatype)&(ompi_mpi_character)))
#define MPI_LOGICAL (((MPI_Datatype)&(ompi_mpi_logic)))
#define MPI_CHARACTER OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_character)
#define MPI_LOGICAL OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_logic)
#if OMPI_HAVE_FORTRAN_LOGICAL1
#define MPI_LOGICAL1 (((MPI_Datatype)&(ompi_mpi_logical1)))
#define MPI_LOGICAL1 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_logical1)
#endif
#if OMPI_HAVE_FORTRAN_LOGICAL2
#define MPI_LOGICAL2 (((MPI_Datatype)&(ompi_mpi_logical2)))
#define MPI_LOGICAL2 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_logical2)
#endif
#if OMPI_HAVE_FORTRAN_LOGICAL4
#define MPI_LOGICAL4 (((MPI_Datatype)&(ompi_mpi_logical4)))
#define MPI_LOGICAL4 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_logical4)
#endif
#if OMPI_HAVE_FORTRAN_LOGICAL8
#define MPI_LOGICAL8 (((MPI_Datatype)&(ompi_mpi_logical8)))
#define MPI_LOGICAL8 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_logical8)
#endif
#define MPI_INTEGER (((MPI_Datatype)&(ompi_mpi_integer)))
#define MPI_INTEGER OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer)
#if OMPI_HAVE_FORTRAN_INTEGER1
#define MPI_INTEGER1 (((MPI_Datatype)&(ompi_mpi_integer1)))
#define MPI_INTEGER1 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer1)
#endif
#if OMPI_HAVE_FORTRAN_INTEGER2
#define MPI_INTEGER2 (((MPI_Datatype)&(ompi_mpi_integer2)))
#define MPI_INTEGER2 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer2)
#endif
#if OMPI_HAVE_FORTRAN_INTEGER4
#define MPI_INTEGER4 (((MPI_Datatype)&(ompi_mpi_integer4)))
#define MPI_INTEGER4 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer4)
#endif
#if OMPI_HAVE_FORTRAN_INTEGER8
#define MPI_INTEGER8 (((MPI_Datatype)&(ompi_mpi_integer8)))
#define MPI_INTEGER8 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer8)
#endif
#if OMPI_HAVE_FORTRAN_INTEGER16
#define MPI_INTEGER16 (((MPI_Datatype)&(ompi_mpi_integer16)))
#define MPI_INTEGER16 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_integer16)
#endif
#define MPI_REAL (((MPI_Datatype)&(ompi_mpi_real)))
#define MPI_REAL OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_real)
#if OMPI_HAVE_FORTRAN_REAL4
#define MPI_REAL4 (((MPI_Datatype)&(ompi_mpi_real4)))
#define MPI_REAL4 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_real4)
#endif
#if OMPI_HAVE_FORTRAN_REAL8
#define MPI_REAL8 (((MPI_Datatype)&(ompi_mpi_real8)))
#define MPI_REAL8 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_real8)
#endif
#if OMPI_HAVE_FORTRAN_REAL16
#define MPI_REAL16 (((MPI_Datatype)&(ompi_mpi_real16)))
#define MPI_REAL16 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_real16)
#endif
#define MPI_DOUBLE_PRECISION (((MPI_Datatype)&(ompi_mpi_dblprec)))
#define MPI_COMPLEX (((MPI_Datatype)&(ompi_mpi_cplex)))
#define MPI_DOUBLE_PRECISION OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_dblprec)
#define MPI_COMPLEX OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_cplex)
#if OMPI_HAVE_FORTRAN_REAL4
#define MPI_COMPLEX8 (((MPI_Datatype)&(ompi_mpi_complex8)))
#define MPI_COMPLEX8 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_complex8)
#endif
#if OMPI_HAVE_FORTRAN_REAL8
#define MPI_COMPLEX16 (((MPI_Datatype)&(ompi_mpi_complex16)))
#define MPI_COMPLEX16 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_complex16)
#endif
#if OMPI_HAVE_FORTRAN_REAL16
#define MPI_COMPLEX32 (((MPI_Datatype)&(ompi_mpi_complex32)))
#define MPI_COMPLEX32 OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_complex32)
#endif
#define MPI_DOUBLE_COMPLEX (((MPI_Datatype)&(ompi_mpi_dblcplex)))
#define MPI_2REAL (((MPI_Datatype)&(ompi_mpi_2real)))
#define MPI_2DOUBLE_PRECISION (((MPI_Datatype)&(ompi_mpi_2dblprec)))
#define MPI_2INTEGER (((MPI_Datatype)&(ompi_mpi_2integer)))
#define MPI_DOUBLE_COMPLEX OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_dblcplex)
#define MPI_2REAL OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_2real)
#define MPI_2DOUBLE_PRECISION OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_2dblprec)
#define MPI_2INTEGER OMPI_PREDEFINED_GLOBAL(MPI_Datatype, ompi_mpi_2integer)
#define MPI_ERRORS_ARE_FATAL (((MPI_Errhandler)&(ompi_mpi_errors_are_fatal)))
#define MPI_ERRORS_RETURN (((MPI_Errhandler)&(ompi_mpi_errors_return)))
#define MPI_ERRORS_ARE_FATAL OMPI_PREDEFINED_GLOBAL(MPI_Errhandler, ompi_mpi_errors_are_fatal)
#define MPI_ERRORS_RETURN OMPI_PREDEFINED_GLOBAL(MPI_Errhandler, ompi_mpi_errors_return)
/* Typeclass definition for MPI_Type_match_size */
#define MPI_TYPECLASS_INTEGER 1