Author: goodell Date: 2012-11-20 16:20:54 -0600 (Tue, 20 Nov 2012) New Revision: 10634 Modified: mpich2/trunk/src/mpi/datatype/type_create_darray.c Log: check rank and the product of array_of_psizes in MPI_Type_create_darray Contributed by IBM. Based on patch 0004 from code discussions. Modified: mpich2/trunk/src/mpi/datatype/type_create_darray.c =================================================================== --- mpich2/trunk/src/mpi/datatype/type_create_darray.c 2012-11-20 22:20:53 UTC (rev 10633) +++ mpich2/trunk/src/mpi/datatype/type_create_darray.c 2012-11-20 22:20:54 UTC (rev 10634) @@ -403,9 +403,11 @@ MPID_BEGIN_ERROR_CHECKS; { /* Check parameters */ - MPIR_ERRTEST_ARGNEG(rank, "rank", mpi_errno); - MPIR_ERRTEST_ARGNONPOS(size, "size", mpi_errno); - MPIR_ERRTEST_ARGNONPOS(ndims, "ndims", mpi_errno); + MPIR_ERRTEST_ARGNONPOS(size, "size", mpi_errno, MPI_ERR_ARG); + /* use MPI_ERR_RANK class for PE-MPI compatibility */ + MPIU_ERR_CHKANDJUMP3((rank < 0 || rank >= size), mpi_errno, MPI_ERR_RANK, + "**argrange", "**argrange %s %d %d", "rank", rank, (size-1)); + MPIR_ERRTEST_ARGNONPOS(ndims, "ndims", mpi_errno, MPI_ERR_DIMS); MPIR_ERRTEST_ARGNULL(array_of_gsizes, "array_of_gsizes", mpi_errno); MPIR_ERRTEST_ARGNULL(array_of_distribs, "array_of_distribs", mpi_errno); @@ -423,6 +425,7 @@ goto fn_fail; } + tmp_size = 1; for (i=0; mpi_errno == MPI_SUCCESS && i < ndims; i++) { MPIR_ERRTEST_ARGNONPOS(array_of_gsizes[i], "gsize", mpi_errno); MPIR_ERRTEST_ARGNONPOS(array_of_psizes[i], "psize", mpi_errno); @@ -468,8 +471,13 @@ i, array_of_psizes[i]); goto fn_fail; } + + tmp_size *= array_of_psizes[i]; } + MPIU_ERR_CHKANDJUMP1((tmp_size != size), mpi_errno, MPI_ERR_ARG, + "**arg", "**arg %s", "array_of_psizes"); + /* TODO: GET THIS CHECK IN ALSO */ /* check if MPI_Aint is large enough for size of global array.
participants (1)
-
goodell@mcs.anl.gov