Skip to content

Commit 6d1f0f4

Browse files
committed
Throw errors when the datatype has an invalid size
The previous usage of `MPI_UNDEFINED` would cause greater issues downstream otherwise. It also removes some compiler warnings with GCC 11. Signed-off-by: Keluaa <[email protected]>
1 parent d214eaa commit 6d1f0f4

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

ompi/mca/part/persist/part_persist.h

+16-8
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,11 @@ mca_part_persist_progress(void)
232232

233233
err = opal_datatype_type_size(&(req->req_datatype->super), &dt_size_);
234234
if(OMPI_SUCCESS != err) goto end_part_progress;
235-
dt_size = (dt_size_ > (size_t) UINT_MAX) ? MPI_UNDEFINED : (uint32_t) dt_size_;
235+
if(dt_size_ > (size_t) UINT_MAX) {
236+
err = OMPI_ERR_UNKNOWN_DATA_TYPE;
237+
goto end_part_progress;
238+
}
239+
dt_size = (uint32_t) dt_size_;
236240
uint32_t bytes = req->real_count * dt_size;
237241

238242
/* Set up persistent sends */
@@ -253,7 +257,11 @@ mca_part_persist_progress(void)
253257

254258
err = opal_datatype_type_size(&(req->req_datatype->super), &dt_size_);
255259
if(OMPI_SUCCESS != err) goto end_part_progress;
256-
dt_size = (dt_size_ > (size_t) UINT_MAX) ? MPI_UNDEFINED : (uint32_t) dt_size_;
260+
if(dt_size_ > (size_t) UINT_MAX) {
261+
err = OMPI_ERR_UNKNOWN_DATA_TYPE;
262+
goto end_part_progress;
263+
}
264+
dt_size = (uint32_t) dt_size_;
257265
uint32_t bytes = req->real_count * dt_size;
258266

259267
/* Set up persistent receives */
@@ -355,8 +363,7 @@ mca_part_persist_precv_init(void *buf,
355363
struct ompi_request_t **request)
356364
{
357365
int err = OMPI_SUCCESS;
358-
size_t dt_size_;
359-
uint32_t dt_size;
366+
size_t dt_size;
360367
mca_part_persist_list_t* new_progress_elem = NULL;
361368

362369
mca_part_persist_precv_request_t *recvreq;
@@ -387,10 +394,10 @@ mca_part_persist_precv_init(void *buf,
387394
if(OMPI_SUCCESS != err) return OMPI_ERROR;
388395

389396
/* Compute total number of bytes */
390-
err = opal_datatype_type_size(&(req->req_datatype->super), &dt_size_);
397+
err = opal_datatype_type_size(&(req->req_datatype->super), &dt_size);
391398
if(OMPI_SUCCESS != err) return OMPI_ERROR;
392-
dt_size = (dt_size_ > (size_t) UINT_MAX) ? MPI_UNDEFINED : (uint32_t) dt_size_;
393-
req->req_bytes = parts * count * dt_size;
399+
if(dt_size > (size_t) UINT_MAX) return OMPI_ERR_UNKNOWN_DATA_TYPE;
400+
req->req_bytes = parts * count * ((uint32_t) dt_size);
394401

395402
/* Set ompi request initial values */
396403
req->req_ompi.req_persistent = true;
@@ -448,7 +455,8 @@ mca_part_persist_psend_init(const void* buf,
448455
/* Determine total bytes to send. */
449456
err = opal_datatype_type_size(&(req->req_datatype->super), &dt_size_);
450457
if(OMPI_SUCCESS != err) return OMPI_ERROR;
451-
dt_size = (dt_size_ > (size_t) UINT_MAX) ? MPI_UNDEFINED : (uint32_t) dt_size_;
458+
if(dt_size_ > (size_t) UINT_MAX) return OMPI_ERR_UNKNOWN_DATA_TYPE;
459+
dt_size = (uint32_t) dt_size_;
452460
req->req_bytes = parts * count * dt_size;
453461

454462
/* non-blocking send set-up data */

0 commit comments

Comments
 (0)