aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2016-06-23 10:25:04 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2016-06-23 10:25:04 +0200
commita3f7edf7e7672094190e04a0b4417de1abfa3de5 (patch)
tree39c44282cf1089692d3828828ee97be9dce8c742
parenta29a2cb4ff4eb153d8e725f126f178371cc0468c (diff)
Biug 1242: fix comma init with empty matrices.
-rw-r--r--Eigen/src/Core/CommaInitializer.h7
-rw-r--r--test/commainitializer.cpp23
2 files changed, 28 insertions, 2 deletions
diff --git a/Eigen/src/Core/CommaInitializer.h b/Eigen/src/Core/CommaInitializer.h
index 2abc6605c..38b1112ff 100644
--- a/Eigen/src/Core/CommaInitializer.h
+++ b/Eigen/src/Core/CommaInitializer.h
@@ -80,8 +80,11 @@ struct CommaInitializer
EIGEN_DEVICE_FUNC
CommaInitializer& operator,(const DenseBase<OtherDerived>& other)
{
- if(other.cols()==0 || other.rows()==0)
+ if(other.rows()==0)
+ {
+ m_col += other.cols();
return *this;
+ }
if (m_col==m_xpr.cols())
{
m_row+=m_currentBlockRows;
@@ -90,7 +93,7 @@ struct CommaInitializer
eigen_assert(m_row+m_currentBlockRows<=m_xpr.rows()
&& "Too many rows passed to comma initializer (operator<<)");
}
- eigen_assert(m_col<m_xpr.cols()
+ eigen_assert(m_col<m_xpr.cols() || (m_xpr.cols()==0 && m_col==0)
&& "Too many coefficients passed to comma initializer (operator<<)");
eigen_assert(m_currentBlockRows==other.rows());
if (OtherDerived::SizeAtCompileTime != Dynamic)
diff --git a/test/commainitializer.cpp b/test/commainitializer.cpp
index 99102b966..86bdb040e 100644
--- a/test/commainitializer.cpp
+++ b/test/commainitializer.cpp
@@ -43,4 +43,27 @@ void test_commainitializer()
4, 5, 6,
vec[2].transpose();
VERIFY_IS_APPROX(m3, ref);
+
+
+ // Check with empty matrices (bug #1242)
+ {
+ int const M = 0;
+ int const N1 = 2;
+ int const N2 = 1;
+
+ {
+ Matrix<double, M, N1> A1;
+ Matrix<double, M, N2> A2;
+ Matrix<double, M, N1 + N2> B;
+ B << A1, A2;
+ }
+ {
+ Matrix<double, N1, M> A1;
+ Matrix<double, N2, M> A2;
+ Matrix<double, N1 + N2, M> B;
+ B << A1,
+ A2;
+ }
+ }
+
}