From f52ad04bbbcf2ca2457100b52bccb82ae35ced3e Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen <4643818-rmlarsen1@users.noreply.gitlab.com> Date: Sat, 21 Feb 2026 21:11:36 -0800 Subject: [PATCH] Fix ASAN-detected bugs in Diagonal::data() and array_cwise test libeigen/eigen!2182 Co-authored-by: Rasmus Munk Larsen --- Eigen/src/Core/Diagonal.h | 8 ++++++-- test/array_cwise.cpp | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) 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); }