[eigen] Assigning a dynamic matrix to a fixed size matrix const reference causes invalid read |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
Hi, Valgrind shows we've been getting invalid reads when assigning a dynamically sized matrix to a const reference of a fixed size matrix. The content of the fixed size matrix is nothing useful after the assignment. How does gcc not detect I'm trying to assign a different type to a reference? Debugging showed the copy constructor is called, while from my understanding it should just fail (or just assign the reference pointer, but not call a constructor). Non-const references fail as expected. Assigning pointers fails as expected as well. Here a piece of code that reproduces the behavior: #include <Eigen/Dense> #include <iostream> int main() { Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> dynMatr(2,2); dynMatr(0,0)=1; dynMatr(0,1)=2; dynMatr(1,0)=3; dynMatr(1,1)=4; //Should fail to compile because of type mismatch! const Eigen::Matrix<double,5,5,0,5,5>& refFixed=dynMatr; std::cout << "Original:" << dynMatr(1,1) << std::endl; std::cout << "Matrix<5x5> reference type: " << refFixed(1,1) << std::endl; return 0; } The output is: play% g++ -DNDEBUG basictest.cxx play% ../a.out Original:4 Matrix<5x5> reference type: 0 Thanks and best regards, Robert |
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |