diff --git a/builtin/ops/builtin_cb.inl b/builtin/ops/builtin_cb.inl index f36b92c..561e8c6 100644 --- a/builtin/ops/builtin_cb.inl +++ b/builtin/ops/builtin_cb.inl @@ -626,7 +626,6 @@ ucg_builtin_init_state(ucg_builtin_op_step_t *step, int is_pack, step->bcopy.unpack_state.dt.generic.state = state_gen; } - // TODO: re-use ucp_request_send_state_init()+ucp_request_send_state_reset() } static UCS_F_ALWAYS_INLINE void diff --git a/builtin/ops/builtin_ops.c b/builtin/ops/builtin_ops.c index 85468f0..d0c544a 100644 --- a/builtin/ops/builtin_ops.c +++ b/builtin/ops/builtin_ops.c @@ -956,6 +956,9 @@ ucg_builtin_step_get_gen_dt_length(ucg_builtin_op_step_t *step, int count) { /* need to generate a one-time state to figure out the packed size */ + if (count == 0) { + return 0; + } ucp_dt_generic_t *dt_gen = ucp_dt_generic(datatype); ucg_builtin_init_state(step, 1, dt_gen, params); size_t len = dt_gen->ops.packed_size(step->bcopy.pack_state.dt.generic.state) / count; @@ -976,6 +979,7 @@ ucs_status_t ucg_builtin_step_create(ucg_builtin_plan_phase_t *phase, ucs_status_t status; /* Set the parameters determining the send-flags later on */ int is_send_contig = UCP_DT_IS_CONTIG(send_dtype); + int is_recv_contig = UCP_DT_IS_CONTIG(recv_dtype); size_t dt_len = is_send_contig ? params->send.dt_len : ucg_builtin_step_get_gen_dt_length(step, send_dtype, params, params->send.count); step->buffer_length = dt_len * params->send.count;