aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Rasmus Munk Larsen <rmlarsen@google.com>2020-07-22 01:38:30 +0000
committerGravatar Rasmus Munk Larsen <rmlarsen@google.com>2020-07-22 01:38:30 +0000
commitacab22c205a15d5c865981f4d0876899591138d4 (patch)
tree20df655bb6568cddb26873e8bb11e7de5283c1c1 /Eigen
parentac2eca6b113cee17fc17b39dd2acdf861f8b139b (diff)
Avoid division by zero in nonZerosEstimate() for empty blocks.
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/SparseCore/SparseBlock.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/Eigen/src/SparseCore/SparseBlock.h b/Eigen/src/SparseCore/SparseBlock.h
index db5090257..5b4f6cc9f 100644
--- a/Eigen/src/SparseCore/SparseBlock.h
+++ b/Eigen/src/SparseCore/SparseBlock.h
@@ -446,9 +446,13 @@ struct unary_evaluator<Block<ArgType,BlockRows,BlockCols,InnerPanel>, IteratorBa
{}
inline Index nonZerosEstimate() const {
- Index nnz = m_block.nonZeros();
- if(nnz<0)
- return m_argImpl.nonZerosEstimate() * m_block.size() / m_block.nestedExpression().size();
+ const Index nnz = m_block.nonZeros();
+ if(nnz < 0) {
+ // Scale the non-zero estimate for the underlying expression linearly with block size.
+ // Return zero if the underlying block is empty.
+ const Index nested_sz = m_block.nestedExpression().size();
+ return nested_sz == 0 ? 0 : m_argImpl.nonZerosEstimate() * m_block.size() / nested_sz;
+ }
return nnz;
}