Re: [eigen] [BUG?] DiagonalWrapper * SparseMatrix with -DNDEBUG *and* optimization dumps core

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


For the record, this has just been fixed: https://bitbucket.org/eigen/eigen/commits/06cca0eab6e9/

gael.

On Wed, Apr 15, 2015 at 7:35 PM, Christoph Hertzberg <chtz@xxxxxxxxxxxxxxxxxxxxxxxx> wrote:
That seems to be the same as this bug:
http://eigen.tuxfamily.org/bz/show_bug.cgi?id=942
I have no idea, what exactly goes wrong there ...

Regarding bugzilla account, can you try again, and if it does not work, ask in irc how to proceed?

Christoph


Am 15.04.2015 um 18:59 schrieb Jan van Dijk:
NOTE: I tried to file the issue below as a (potential) Eigen bug in Bugzilla,
but I never received the promised confirmation mail for my registration.
More Bugzilla problems still?

   Dear friends,

With today's trunk version of Eigen, it appears that left-multiplication of a
ColMajor sparse matrix and right-multiplication of a RowMajor sparse
matrix with a DiagonalWrapper fail. On gcc-4.8.3 I get a segmentation
fault or a bus error  when passing -DNDEBUG  *AND* -O[1,2} is used.
Otherwise, everything works fine

I reduced this to the code below. (I apologize if i mis-understand Eigen
and that code is in error. I am an Eigen-novice still...)

   Regards, Jan.

// sparse_test.cpp:
#include "Eigen/Core"
#include "Eigen/Sparse"
#include <iostream>

typedef double value_type;
typedef Eigen::Matrix<value_type, Eigen::Dynamic, 1> vector_type;
typedef Eigen::SparseMatrix<value_type, Eigen::ColMajor> cm_matrix_type;
typedef Eigen::SparseMatrix<value_type, Eigen::RowMajor> rm_matrix_type;

int main()
{
         cm_matrix_type cmA(1,1);
         cmA.insert(0,0) = 1;

         rm_matrix_type rmA(1,1);
         rmA.insert(0,0) = 1;

         vector_type d(1);
         d[0] = 2;

         // OK:
         std::cout << ( cmA*d.asDiagonal() )..eval();
         std::cout << ( d.asDiagonal()*rmA )..eval();

         // with gcc-4.8.3:
         // - Bus error or segmentation fault with -DNDEBUG and -O{1,2}
         std::cout << ( rmA*d.asDiagonal() )..eval();
         std::cout << ( d.asDiagonal()*cmA )..eval();

         return 0;
}

jan@gum15: gcc --version
gcc (SUSE Linux) 4.8.3 20140627 [gcc-4_8-branch revision 212064]

jan@gum15:  g++ -DNDEBUG -O2 -I /home/jan/local/eigen/include/eigen3
sparse_test.cpp && ./a.out
2
2
Segmentation fault (core dumped)

(Omit -DNDEBUG *or* -O2 and everything works like a charm.)





--
----------------------------------------------
Dipl.-Inf., Dipl.-Math. Christoph Hertzberg
Cartesium 0.049
Universität Bremen
Enrique-Schmidt-Straße 5
28359 Bremen

Tel: +49 (421) 218-64252
----------------------------------------------





Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/