aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-04-18 22:43:27 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-04-18 22:43:27 +0200
commit5a3c48e3c6c6a3966b68f715610e0eaafa906b2a (patch)
tree24881445e1f4918309957ffadc25af7258599971 /Eigen
parent3b429b71e65916b689d0d16e0fac358a79f2dfbe (diff)
bug #942: fix dangling references in evaluator of diagonal * sparse products.
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/SparseCore/SparseDiagonalProduct.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/Eigen/src/SparseCore/SparseDiagonalProduct.h b/Eigen/src/SparseCore/SparseDiagonalProduct.h
index b7598c885..fdc4bd495 100644
--- a/Eigen/src/SparseCore/SparseDiagonalProduct.h
+++ b/Eigen/src/SparseCore/SparseDiagonalProduct.h
@@ -107,7 +107,9 @@ struct sparse_diagonal_product_evaluator<SparseXprType, DiagCoeffType, SDP_AsCwi
{
public:
InnerIterator(const sparse_diagonal_product_evaluator &xprEval, Index outer)
- : m_cwiseEval(xprEval.m_sparseXprNested.innerVector(outer).cwiseProduct(xprEval.m_diagCoeffNested)),
+ : m_innerVectorXpr(xprEval.m_sparseXprNested.innerVector(outer)),
+ m_cwiseXpr(m_innerVectorXpr.cwiseProduct(xprEval.m_diagCoeffNested)),
+ m_cwiseEval(m_cwiseXpr),
m_cwiseIter(m_cwiseEval, 0),
m_outer(outer)
{}
@@ -123,6 +125,8 @@ struct sparse_diagonal_product_evaluator<SparseXprType, DiagCoeffType, SDP_AsCwi
inline operator bool() const { return m_cwiseIter; }
protected:
+ const typename SparseXprType::ConstInnerVectorReturnType m_innerVectorXpr;
+ const CwiseProductType m_cwiseXpr;
CwiseProductEval m_cwiseEval;
CwiseProductIterator m_cwiseIter;
Index m_outer;