Skip to content

Commit 0641005

Browse files
committed
Only check the parameters on valid dimensions.
1 parent 6aac0d9 commit 0641005

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

ompi/mpi/c/type_create_darray.c

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,26 @@ int MPI_Type_create_darray(int size,
7575
} else if( (MPI_ORDER_C != order) && (MPI_ORDER_FORTRAN != order) ) {
7676
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
7777
}
78-
for( i = 0; i < ndims; i++ ) {
79-
if( (MPI_DISTRIBUTE_BLOCK != distrib_array[i]) &&
80-
(MPI_DISTRIBUTE_CYCLIC != distrib_array[i]) &&
81-
(MPI_DISTRIBUTE_NONE != distrib_array[i]) ) {
78+
if( ndims > 0 ) {
79+
for( i = 0; i < ndims; i++ ) {
80+
if( (MPI_DISTRIBUTE_BLOCK != distrib_array[i]) &&
81+
(MPI_DISTRIBUTE_CYCLIC != distrib_array[i]) &&
82+
(MPI_DISTRIBUTE_NONE != distrib_array[i]) ) {
83+
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
84+
} else if( (gsize_array[i] < 1) || (psize_array[i] < 0) ||
85+
((darg_array[i] < 0) && (MPI_DISTRIBUTE_DFLT_DARG != darg_array[i]) ) ) {
86+
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
87+
} else if( (MPI_DISTRIBUTE_DFLT_DARG != darg_array[i]) &&
88+
(MPI_DISTRIBUTE_BLOCK == distrib_array[i]) &&
89+
((darg_array[i] * psize_array[i]) < gsize_array[i]) ) {
90+
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
91+
} else if( 1 > psize_array[i] )
92+
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
93+
prod_psize *= psize_array[i];
94+
}
95+
if( prod_psize != size )
8296
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
83-
} else if( (gsize_array[i] < 1) || (psize_array[i] < 0) ||
84-
((darg_array[i] < 0) && (MPI_DISTRIBUTE_DFLT_DARG != darg_array[i]) ) ) {
85-
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
86-
} else if( (MPI_DISTRIBUTE_DFLT_DARG != darg_array[i]) &&
87-
(MPI_DISTRIBUTE_BLOCK == distrib_array[i]) &&
88-
((darg_array[i] * psize_array[i]) < gsize_array[i]) ) {
89-
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
90-
} else if( 1 > psize_array[i] )
91-
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
92-
prod_psize *= psize_array[i];
9397
}
94-
if( prod_psize != size )
95-
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME);
9698
}
9799

98100
OPAL_CR_ENTER_LIBRARY();

0 commit comments

Comments
 (0)