[eigen] Segfault in test matrixExponential_2

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


Hello,

I'm trying to understand a segmentation fault in the matrixExponential_2 test in unsupported/test. Unfortunately, it's rather sensitive: when I start removing code in an attempt to get a minimal test example, the segmentation fault disappears, even though the code has nothing to do with it. The segfault only happens when compiling with g++ 4.3 with the flags -O2 and -msse2; it disappears when using g++ 4.4 (so perhaps I should not bother ...).

I did manage to get a backtrace (compiled with -g2 -fno-inline); see below. The arguments in frame #1 are wrong (this = 0x0), but 'this' in frame #1 should be the same as dst in frame #2. I guess that means that the stack frame is corrupted by a dangling pointer?

I'm not sure of the best way to proceed. One problem is that it's deep in Eigen's internal code which I don't understand. Any suggestions?

Thanks,
Jitse



Backtrace from gdb:

#0  0x08049957 in Eigen::ei_pload<double> (from=0xbffb7720)
    at ../Eigen/src/Core/arch/SSE/PacketMath.h:176
#1  0x0807844e in Eigen::MatrixBase<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32>, 1, 33331, 0, 32> >::copyPacket<Eigen::CwiseBinaryOp<Eigen::ei_scalar_sum_op<double>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32>, 1, 33331, 2, 32>, Eigen::CwiseUnaryOp<Eigen::ei_scalar_multiple_op<double>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32> > >, 1, 0> (this=0x0, index=-1074039000,
    other=@0xbffb7720) at ../Eigen/src/Core/Coeffs.h:378
#2  0x08078541 in Eigen::ei_assign_impl<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, Eigen::CwiseBinaryOp<Eigen::ei_scalar_sum_op<double>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32>, 1, 33331, 2, 32>, Eigen::CwiseUnaryOp<Eigen::ei_scalar_multiple_op<double>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32> > >, 1, 0>::run (dst=@0xbffb7774, src=@0xbffb7720)
    at ../Eigen/src/Core/Assign.h:341
#3  0x080785d2 in Eigen::MatrixBase<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32>, 1, 33331, 0, 32> >::lazyAssign<Eigen::CwiseBinaryOp<Eigen::ei_scalar_sum_op<double>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32>, 1, 33331, 2, 32>, Eigen::CwiseUnaryOp<Eigen::ei_scalar_multiple_op<double>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32> > > > (this=0xbffb7774, other=@0xbffb7720)
    at ../Eigen/src/Core/Assign.h:429
#4  0x08078711 in Eigen::MapBase<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32>, 1, 33331, 0, 32> >::operator+=<Eigen::CwiseUnaryOp<Eigen::ei_scalar_multiple_op<double>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32> > > (this=0xbffb7774,
    other=@0xbffb7784) at ../Eigen/src/Core/MapBase.h:214
#5  0x080787b5 in Eigen::ei_outer_product_selector<1>::run<Eigen::GeneralProduct<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 1, 0, 32>, 33331, 1, 0, 32>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32>, 0>, Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32> > (prod=@0xbffb78d8, dest=@0xbffb7828, alpha=-1)
    at ../Eigen/src/Core/Product.h:237
#6  0x08078840 in Eigen::ProductBase<Eigen::GeneralProduct<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 1, 0, 32>, 33331, 1, 0, 32>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32>, 0>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 1, 0, 32>, 33331, 1, 0, 32>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32> >::subTo<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32> > (this=0xbffb78d8, dst=@0xbffb7828)
    at ../Eigen/src/Core/ProductBase.h:109
#7  0x08078878 in Eigen::NoAlias<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 33331, 0, 32> >::operator-=<Eigen::GeneralProduct<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 1, 0, 32>, 33331, 1, 0, 32>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32>, 0>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 33331, 1, 0, 32>, 33331, 1, 0, 32>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, 33331, 33331, 1, 33331, 33331>, 0>, 33331, 33331, 0, 32>, 1, 33331, 0, 32>, 1, 33331, 0, 32> > (this=0xbffb78e8, other=@0xbffb78d8) at ../Eigen/src/Core/NoAlias.h:71
#8  0x08078b5e in Eigen::ei_partial_lu_impl<double, 1>::unblocked_lu (
    lu=@0xbffb79e4, row_transpositions=0xbffb7a8c,
    nb_transpositions=@0xbffb7a98) at ../Eigen/src/LU/PartialPivLU.h:264
#9  0x08084e38 in Eigen::ei_partial_lu_impl<double, 1>::blocked_lu (rows=3,
    cols=3, lu_data=0xbffb7b2c, luStride=3, row_transpositions=0xbffb7a8c,
    nb_transpositions=@0xbffb7a98, maxBlockSize=256)
    at ../Eigen/src/LU/PartialPivLU.h:297
#10 0x08084f49 in Eigen::ei_partial_lu_inplace<Eigen::Matrix<double, 3, 3, 1, 3, 3>, Eigen::Matrix<int, 3, 1, 0, 3, 1> > (lu=@0xbffb7b2c,
    row_transpositions=@0xbffb7a8c, nb_transpositions=@0xbffb7a98)
    at ../Eigen/src/LU/PartialPivLU.h:373
#11 0x0808502a in Eigen::PartialPivLU<Eigen::Matrix<double, 3, 3, 1, 3, 3> >::compute (this=0xbffb7b2c, matrix=@0xbffb7cf0)
    at ../Eigen/src/LU/PartialPivLU.h:390
#12 0x0808514f in PartialPivLU (this=0xbffb7b2c, matrix=@0xbffb7cf0)
    at ../Eigen/src/LU/PartialPivLU.h:198
#13 0x080851a1 in Eigen::MatrixBase<Eigen::Matrix<double, 3, 3, 1, 3, 3> >::partialPivLu (this=0xbffb7cf0) at ../Eigen/src/LU/PartialPivLU.h:453
#14 0x08085ef2 in MatrixExponential (this=0xbffb7c14, M=@0xbffb7d88,
    result=0xbffb7e88)
    at ../unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h:195
#15 0x08086035 in Eigen::ei_matrix_exponential<Eigen::Matrix<double, 3, 3, 1, 3, 3> > (M=@0xbffb7ed0, result=0xbffb7e88)
    at ../unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h:304
#16 0x0808b32a in randomTest<Eigen::Matrix<double, 3, 3, 1, 3, 3> > (
    m=@0xbffb7f68, tol=1e-13) at ../unsupported/test/matrixExponential.cpp:105
#17 0x08049425 in test_matrixExponential ()
    at ../unsupported/test/matrixExponential.cpp:120
#18 0x0804965b in main (argc=1, argv=Cannot access memory at address 0x6
) at ../test/main.h:445



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