Mercurial > hg > octave-nkf
diff liboctave/floatSVD.cc @ 15887:8ced82e96b48 stable
Fix segfaults with gesdd driver for svd (bug #37998).
* liboctave/CmplxSVD.cc(init): Correctly size rwork array for gesdd driver.
* liboctave/fCmplxSVD.cc(init): Correctly size rwork array for gesdd driver.
* liboctave/dbleSVD.cc(init): Tweak coding style to match CmplxSVD.cc.
* liboctave/floatSVD.cc(init): Tweak coding style to match fCmplxSVD.cc.
* src/DLD-FUNCTIONS/svd.cc: Add %!test for gesdd driver and complex matrices.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 03 Jan 2013 10:05:03 -0800 |
parents | 72c96de7a403 |
children |
line wrap: on
line diff
--- a/liboctave/floatSVD.cc +++ b/liboctave/floatSVD.cc @@ -118,8 +118,7 @@ // // For Lapack 3.0, this problem seems to be fixed. - jobu = 'N'; - jobv = 'N'; + jobu = jobv = 'N'; ncol_u = nrow_vt = 1; break; @@ -142,14 +141,15 @@ float *vt = right_sm.fortran_vec (); - // Ask DGESVD what the dimension of WORK should be. + // Query SGESVD for the correct dimension of WORK. octave_idx_type lwork = -1; Array<float> work (dim_vector (1, 1)); octave_idx_type one = 1; - octave_idx_type m1 = std::max (m, one), nrow_vt1 = std::max (nrow_vt, one); + octave_idx_type m1 = std::max (m, one); + octave_idx_type nrow_vt1 = std::max (nrow_vt, one); if (svd_driver == SVD::GESVD) {