diff --git a/src/api/c/assign.cpp b/src/api/c/assign.cpp index 26220f197c..1595ceeb1d 100644 --- a/src/api/c/assign.cpp +++ b/src/api/c/assign.cpp @@ -32,6 +32,9 @@ void assign(Array &out, const unsigned &ndims, const af_seq *index, const dim4 const outDs = out.dims(); dim4 const iDims = in_.dims(); + // Nothing to do for empty arrays + if (iDims.elements() == 0) return; + DIM_ASSERT(0, (outDs.ndims()>=iDims.ndims())); DIM_ASSERT(0, (outDs.ndims()>=(dim_t)ndims)); diff --git a/test/assign.cpp b/test/assign.cpp index 8eb81584df..885934f2db 100644 --- a/test/assign.cpp +++ b/test/assign.cpp @@ -1002,3 +1002,18 @@ TEST(Assign, ISSUE_1764) } } } + +TEST(Assign, ISSUE_1677) +{ + try { + dim_t sz = 1; + af::array a = af::constant(1.0f, 3, sz, f32); + af::array b = af::constant(2.0f, 3, sz, f32); + af::array cond = af::constant(0, sz, b8); // all false + a(af::span, cond) = b(af::span, cond); + } catch(af::exception &ex) { + FAIL() << "ArrayFire exception: " << ex.what(); + } catch(...) { + FAIL() << "Unknown exception thrown"; + } +}