It seems that Mrecv() tries to write on the status arg, even when it is STATUS_IGNORE. Looking at the sources (pmrecv.c and pmprobe.c), there are some memcheck code paths that access status but do not check for STATUS_IGNORE, please review them.
$ cat tmp.c #include <mpi.h> int main(int argc, char *argv[]) { MPI_Message message; MPI_Init(&argc, &argv); message = MPI_MESSAGE_NO_PROC; MPI_Mrecv(NULL, 0, MPI_BYTE, &message, MPI_STATUS_IGNORE); MPI_Finalize(); return 0; } $ mpicc tmp.c $ valgrind ./a.out ... ==17489== ==17489== Invalid write of size 8 ==17489== at 0x4CA811C: PMPI_Mrecv (pmrecv.c:62) ==17489== by 0x400816: main (in /tmp/a.out) ==17489== Address 0x0 is not stack'd, malloc'd or (recently) free'd ==17489== [localhost:17489] *** Process received signal *** [localhost:17489] Signal: Segmentation fault (11) [localhost:17489] Signal code: Address not mapped (1) [localhost:17489] Failing at address: (nil) ... -- Lisandro Dalcin --------------- CIMEC (INTEC/CONICET-UNL) Predio CONICET-Santa Fe Colectora RN 168 Km 472, Paraje El Pozo 3000 Santa Fe, Argentina Tel: +54-342-4511594 (ext 1011) Tel/Fax: +54-342-4511169