Registered Member
|
Hi,
I'm hitting a stack overflow using Eigen 3.2.1. Eigen::DenseCoeffsBase::packet< Eigen::ReturnByValue<Eigen::internal::inverse_impl< Eigen::Matrix<float,4,4,1,4,4> > >, 0>::packet<1>() keeps calling itself (DenseCoeffsBase.h line 212). This is on code that has been running fine up till now. I was suspecting we're screwing up the stack somewhere, but then looking at the code I can't see how that can't infinitely recurse, unless derived() is guaranteed to be of a type that has a different packet() method. I'm getting a bit lost in the template and type maze so I'm not sure what should happen. In practice that function seems to be definitely calling itself... I had a quick look at the changelog but can't find anything mentioning packet() specifically. I'll post a traceback shortly, it just needs to go through some red tape. Thanks, A. |
Registered Member
|
And here's a stack trace.
|
Registered Member
|
This seems to be happening when passing an inverse() call to a method expecting a const Ref<>. I'll post a test case shortly.
|
Moderator
|
I see that you are using Eigen 3.2.1. Does this still occur with 3.2.5?
|
Registered Member
|
We haven't got 3.2.5 installed yet, I'll give it a go. Is there any fix between 3.2.1 and 3.2.5 that would address this?
Here's the test case. When building in optimized mode (-O3 and removing -fno-inline), the infinite recursion seems to be turning into an infinite loop. test.cc:
build:
stack trace:
|
Registered Member
|
Just tried with 3.2.5, and the crash is gone. Is there something in the changelog that would explain it? I can't quite tell what it could be.
|
Registered users: bartoloni, Bing [Bot], Google [Bot], Yahoo [Bot]