The known corrections to MPI-2 are listed in this document. All page and line numbers are for the official version of the MPI-2 document available from the MPI Forum home page at http://www.mpi-forum.org. Information on reporting mistakes in the MPI documents is also located on the MPI Forum home page.
This is a DRAFT and is not official.
 
3.2.11 MPI_GET_COUNT with zero-length datatypes  
  
The value returned as the  count argument of  
 MPI_GET_COUNT for a datatype of length zero where zero bytes  
have been transferred is zero.  If the number of bytes transfered is  
greater than zero,  MPI_UNDEFINED is returned.  
 
 
 
 Rationale.  
 
Zero-length datatypes may be created in a number of cases.  In MPI-2,  
an important case is  MPI_TYPE_CREATE_DARRAY, where the  
definition of the particular darry results in an empty block on some  
MPI process.  Programs written in an SPMD style will not check for  
this special case and may want to use  MPI_GET_COUNT to check  
the status.    
 ( End of rationale.) 
 
  
  
  
 
3.2.12 MPI_GROUP_TRANSLATE_RANKS and MPI_PROC_NULL
MPI_PROC_NULL is a valid rank for input to MPI_GROUP_TRANSLATE_RANKS, which returns MPI_PROC_NULL as the translated rank.
 
  MPI_Errhandler MPI_Errhandler_f2c(MPI_Fint errhandler) 
  
  MPI_Fint MPI_Errhandler_c2f(MPI_Errhandler errhandler) 
  
These were overlooked.
void cpp_lib_call(MPI::Comm& cpp_comm);but should read
void cpp_lib_call(MPI::Comm cpp_comm);
 
 
char name[MPI_MAX_NAME_STRING];but should read
char name[MPI_MAX_OBJECT_NAME];since MPI_MAX_NAME_STRING is not an MPI-defined constant.
MPI_{COMM,WIN,FILE}_GET_ERRHANDLER behave as if a new error handler object is created. That is, once the error handler is no longer needed, MPI_ERRHANDLER_FREE should be called with the error handler returned from MPI_ERRHANDLER_GET or MPI_{COMM,WIN,FILE}_GET_ERRHANDLER to mark the error handler for deallocation. This provides behavior similar to that of MPI_COMM_GROUP and MPI_GROUP_FREE.
MPI_BYTE should be used to send and receive data that is packed using MPI_PACK_EXTERNAL.
 
 
 
 Rationale.  
 
 MPI_PACK_EXTERNAL specifies that there is no header on the message  
and further   
specifies the exact format of the data.  Since  MPI_PACK may (and is  
allowed   
to) use a header, the datatype  MPI_PACKED cannot be used for data  
packed with   
 MPI_PACK_EXTERNAL.    
 ( End of rationale.) 
 
  
  
 
Many of the descriptions of the collective routines provide illustrations in terms of blocking MPI point-to-point routines. These are intended solely to indicate what data is sent or received by what process. Many of these examples are not correct MPI programs; for purposes of simplicity, they often assume infinite buffering.
MPI_PROC_NULL is a valid target rank in the MPI RMA calls MPI_ACCUMULATE, MPI_GET, and MPI_PUT. The effect is the same as for MPI_PROC_NULL in MPI point-to-point communication.
 
  void MPI::Win::Get(const void *origin_addr, int origin_count, const MPI::Datatype& origin_datatype, int target_rank, MPI::Aint target_disp, int target_count, const MPI::Datatype& target_datatype) const 
  
but should read
 
  void MPI::Win::Get(void *origin_addr, int origin_count, const  
  MPI::Datatype& origin_datatype, int target_rank, MPI::Aint target_disp,  
  int target_count, const MPI::Datatype& target_datatype) const 
  
  
  
  
 
MPI_REPLACE, like the other predefined operations, is defined only for the predefined MPI datatypes.
 
 
 
 Rationale.  
 
The rationale for this is that, for consistency,  MPI_REPLACE  
should have the same limitations as the other operations.  Extending  
it to all datatypes doesn't provide any real benefit.  
 ( End of rationale.) 
 
  
  
 
Both groups should provide the same count value.
but should read
Both groups should provide count and datatype arguments that specify the same type signature.
 
 
 
 Advice  
        to implementors.  
 
High quality implementations should raise an error when a keyval  
that was created by a call to  MPI_XXX_CREATE_KEYVAL is  
used with an object of the wrong type with a call to  
 MPI_YYY_GET_ATTR,  MPI_YYY_SET_ATTR,  MPI_YYY_DELETE_ATTR, or  
 MPI_YYY_FREE_KEYVAL. To do so, it is necessary to maintain, with   
each keyval, information on the type of the associated user  
function.   
 ( End of advice to implementors.) 
 
  
  
 
 
  bool MPI::Win::Get_attr(const MPI::Win& win, int win_keyval, void* attribute_val) const 
  
but should read
 
  bool MPI::Win::Get_attr(int win_keyval, void* attribute_val) const 
  
  
  
  
 
MPI_DISPLACEMENT_CURRENT is invalid unless the amode for the file has MPI_MODE_SEQUENTIAL set.
If MPI_MODE_SEQUENTIAL mode was specified when the file was opened, it is erroneous to call the routines in this section.
but should read
If MPI_MODE_SEQUENTIAL mode was specified when the file was opened, it is erroneous to call the routines in this section, with the exception of MPI_FILE_GET_BYTE_OFFSET.
MPI_LONG_LONG 8but should read
MPI_LONG_LONG_INT 8In addition, the type MPI_LONG_LONG should be added as an optional type; it is a synonym for MPI_LONG_LONG_INT.
typedef MPI::Datarep_extent_function(const MPI::Datatype& datatype,but should read
 
 
typedef void MPI::Datarep_extent_function(const MPI::Datatype& datatype,
 
  typedef MPI::Datarep_conversion_function(void* userbuf, MPI::Datatype& datatype, int count, void* filebuf, MPI::Offset position, void* extra_state); 
  
but should read
 
  typedef void MPI::Datarep_conversion_function(void* userbuf, MPI::Datatype& datatype, int count, void* filebuf, MPI::Offset position, void* extra_state); 
  
  
  
 
void Send(void* buf, int count, const MPI::Datatype& type,but should read
void Send(const void* buf, int count, const MPI::Datatype& type,
void MPI::Win::Get(const void *origin_addr, int origin_count, constbut should read
void MPI::Win::Get(void *origin_addr, int origin_count, const
typedef MPI::Datarep_conversion_function(void* userbuf,but should read
typedef void MPI::Datarep_conversion_function(void* userbuf,
typedef MPI::Datarep_extent_function(const MPI::Datatype& Datatype,but should read
typedef void MPI::Datarep_extent_function(const MPI::Datatype& Datatype,
Remove the const from const MPI::Datatype.
Remove the const from const MPI::Datatype.
Remove the const from const MPI::Datatype.
// Type: MPI::Errhandlerbut should read
// Type: const MPI::Errhandler
 
    void Get_version(int& version, int& subversion); 
  
but should read 
  
 
    void Get_version(int& version, int& subversion) 
  
  
 
    Exception::Exception(int error_code); 
  
    int Exception::Get_error_code() const; 
  
    int Exception::Get_error_class() const; 
  
    const char* Exception::Get_error_string() const; 
  
but should read 
  
 
    Exception::Exception(int error_code) 
  
    int Exception::Get_error_code() const 
  
    int Exception::Get_error_class() const 
  
    const char* Exception::Get_error_string() const 
  
  
  
but should read 
  
but should read