- tmp_sendcounts.reset(new int[size]);
- std::copy(recvcounts, recvcounts + size, tmp_sendcounts.get());
- real_sendcounts = tmp_sendcounts.get();
- tmp_senddispls.reset(new int[size]);
- std::copy(recvdispls, recvdispls + size, tmp_senddispls.get());
- real_senddispls = tmp_senddispls.get();
- tmp_sendtypes.reset(new MPI_Datatype[size]);
- std::copy(recvtypes, recvtypes + size, tmp_sendtypes.get());
- real_sendtypes = tmp_sendtypes.get();
+ tmp_sendcounts.assign(recvcounts, recvcounts + size);
+ real_sendcounts = tmp_sendcounts.data();
+ tmp_senddispls.assign(recvdispls, recvdispls + size);
+ real_senddispls = tmp_senddispls.data();
+ tmp_sendtypes.assign(recvtypes, recvtypes + size);
+ real_sendtypes = tmp_sendtypes.data();
+ }
+
+
+ if(recvtypes[comm->rank()]->size() * recvcounts[comm->rank()] != real_sendtypes[comm->rank()]->size() * real_sendcounts[comm->rank()]){
+ XBT_WARN("MPI_(I)Alltoallw : receive size from me differs from sent size to me : %zu vs %zu", recvtypes[comm->rank()]->size() * recvcounts[comm->rank()], real_sendtypes[comm->rank()]->size() * real_sendcounts[comm->rank()]);
+ return MPI_ERR_TRUNCATE;