diff --git a/core/matrix/fbcsr.cpp b/core/matrix/fbcsr.cpp index 5019a047923..9e4a264b3e6 100644 --- a/core/matrix/fbcsr.cpp +++ b/core/matrix/fbcsr.cpp @@ -336,6 +336,11 @@ void Fbcsr::read(const mat_data &data) blocks.size() * bs * bs, bs); tmp->row_ptrs_.get_data()[0] = 0; + if (data.nonzeros.size() == 0) { + tmp->move_to(this); + return; + } + index_type cur_brow = 0; index_type cur_bnz = 0; index_type cur_bcol = blocks.begin()->first.block_column; diff --git a/core/test/matrix/fbcsr.cpp b/core/test/matrix/fbcsr.cpp index 6b59ce1d30d..80890e146e5 100644 --- a/core/test/matrix/fbcsr.cpp +++ b/core/test/matrix/fbcsr.cpp @@ -460,6 +460,24 @@ TYPED_TEST(Fbcsr, CanBeReadFromMatrixData) } +TYPED_TEST(Fbcsr, CanBeReadFromEmptyMatrixData) +{ + using Mtx = typename TestFixture::Mtx; + using MtxData = typename TestFixture::MtxData; + auto m = Mtx::create(this->exec); + m->set_block_size(this->fbsample.bs); + MtxData mdata; + mdata.size = gko::dim<2>{0, 0}; + + m->read(mdata); + + ASSERT_EQ(m->get_size(), (gko::dim<2>{0, 0})); + ASSERT_EQ(m->get_const_row_ptrs()[0], 0); + ASSERT_EQ(m->get_const_col_idxs(), nullptr); + ASSERT_EQ(m->get_const_values(), nullptr); +} + + TYPED_TEST(Fbcsr, GeneratesCorrectMatrixData) { using value_type = typename TestFixture::value_type;