diff --git a/src/mpi/c/group_compare.c b/src/mpi/c/group_compare.c index 2d03da8b2d..d8b5ec4713 100644 --- a/src/mpi/c/group_compare.c +++ b/src/mpi/c/group_compare.c @@ -91,11 +91,11 @@ int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) { /* set comparison result */ if( identical ) { - *result=MPI_UNEQUAL; + *result=MPI_IDENT; } else if( similar ) { *result=MPI_SIMILAR; } else { - *result=MPI_IDENT; + *result=MPI_UNEQUAL; } return return_value; diff --git a/src/mpi/c/group_difference.c b/src/mpi/c/group_difference.c index bfc2be511d..bbe2015e68 100644 --- a/src/mpi/c/group_difference.c +++ b/src/mpi/c/group_difference.c @@ -69,6 +69,12 @@ int MPI_Group_difference(MPI_Group group1, MPI_Group group2, new_group_size++; } /* end proc loop */ + if ( 0 == new_group_size ) { + *new_group = MPI_GROUP_EMPTY; + OBJ_RETAIN(MPI_GROUP_EMPTY); + return MPI_SUCCESS; + } + /* allocate a new ompi_group_t structure */ new_group_pointer=ompi_group_allocate(new_group_size); if( NULL == new_group_pointer ) { diff --git a/src/mpi/c/group_intersection.c b/src/mpi/c/group_intersection.c index ea6e861ac1..a44835f1a9 100644 --- a/src/mpi/c/group_intersection.c +++ b/src/mpi/c/group_intersection.c @@ -64,6 +64,13 @@ int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, } /* end proc2 loop */ } /* end proc1 loop */ + if ( 0 == group_size ) { + *new_group = MPI_GROUP_EMPTY; + OBJ_RETAIN(MPI_GROUP_EMPTY); + return MPI_SUCCESS; + } + + /* fill in new group */ new_group_pointer=ompi_group_allocate(group_size); if( NULL == new_group_pointer ) { diff --git a/src/mpi/c/group_union.c b/src/mpi/c/group_union.c index 16dc4e47a1..936fe47a5b 100644 --- a/src/mpi/c/group_union.c +++ b/src/mpi/c/group_union.c @@ -72,6 +72,12 @@ int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *new_group) new_group_size++; } /* end proc loop */ + if ( 0 == new_group_size ) { + *new_group = MPI_GROUP_EMPTY; + OBJ_RETAIN(MPI_GROUP_EMPTY); + return MPI_SUCCESS; + } + /* get new group struct */ new_group_pointer = ompi_group_allocate(new_group_size); if (NULL == new_group_pointer) {