diff --git a/libinterp/corefcn/mex.cc b/libinterp/corefcn/mex.cc --- a/libinterp/corefcn/mex.cc +++ b/libinterp/corefcn/mex.cc @@ -2635,12 +2635,37 @@ protected: { ELT_T *ppr = static_cast (m_pr); +#if 0 && defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR) + + // FIXME: Currently not allowed because sparse arrays don't support + // custom allocators. + + octave::unwind_action act ([=] () { + maybe_disown_ptr (m_pr); + maybe_disown_ptr (m_ir); + maybe_disown_ptr (m_jc); + }); + Sparse val (dv, static_cast (m_nzmax), ppr, m_ir, m_jc); - maybe_disown_ptr (m_pr); - maybe_disown_ptr (m_ir); - maybe_disown_ptr (m_jc); +#else + + octave_idx_type m = dv(0); + octave_idx_type n = dv(1); + + Sparse val (m, n, static_cast (m_nzmax)); + + for (mwIndex i = 0; i < m_nzmax; i++) + { + val.xdata (i) = ppr[i]; + val.xridx (i) = m_ir[i]; + } + + for (mwIndex i = 0; i < n + 1; i++) + val.xcidx (i) = m_jc[i]; + +#endif return octave_value (val); }