diff --git a/Eigen/src/Core/Diagonal.h b/Eigen/src/Core/Diagonal.h index a3bd071b5..654cfc9d0 100644 --- a/Eigen/src/Core/Diagonal.h +++ b/Eigen/src/Core/Diagonal.h @@ -91,8 +91,12 @@ class Diagonal : public internal::dense_xpr_base::value, Scalar, const Scalar> ScalarWithConstIfNotLvalue; - EIGEN_DEVICE_FUNC inline ScalarWithConstIfNotLvalue* data() { return &(m_matrix.coeffRef(rowOffset(), colOffset())); } - EIGEN_DEVICE_FUNC inline const Scalar* data() const { return &(m_matrix.coeffRef(rowOffset(), colOffset())); } + EIGEN_DEVICE_FUNC inline ScalarWithConstIfNotLvalue* data() { + return rows() > 0 ? &(m_matrix.coeffRef(rowOffset(), colOffset())) : nullptr; + } + EIGEN_DEVICE_FUNC inline const Scalar* data() const { + return rows() > 0 ? &(m_matrix.coeffRef(rowOffset(), colOffset())) : nullptr; + } EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index row, Index) { EIGEN_STATIC_ASSERT_LVALUE(MatrixType) diff --git a/test/array_cwise.cpp b/test/array_cwise.cpp index f361cce77..086f48ff1 100644 --- a/test/array_cwise.cpp +++ b/test/array_cwise.cpp @@ -773,6 +773,7 @@ void comparisons(const ArrayType& m) { // test bug2966: select did not support some scalar types that forbade implicit conversions from bool ArrayX m5(10); + m5.setConstant(scalar_wrapper(0)); m5 = (m5 == scalar_wrapper(0)).select(m5, m5); }