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

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

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
Segmentation fault (core dumped)

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

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