From 81fe2d424f05e5596772caeaa0e2b7e6518da92c Mon Sep 17 00:00:00 2001 From: Charles Schlosser Date: Fri, 14 Jul 2023 21:12:45 +0000 Subject: [PATCH] Fix more gcc compiler warnings / sort-of bugs --- Eigen/src/Core/Block.h | 6 +++--- Eigen/src/Core/VectorBlock.h | 3 +-- test/block.cpp | 4 ++-- test/random_matrix.cpp | 2 +- test/triangular.cpp | 25 +++++++++++++++++-------- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Eigen/src/Core/Block.h b/Eigen/src/Core/Block.h index 58057633e..dad2af802 100644 --- a/Eigen/src/Core/Block.h +++ b/Eigen/src/Core/Block.h @@ -357,7 +357,7 @@ class BlockImpl_dense */ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl_dense(XprType& xpr, Index i) - : Base(add_to_nullable_pointer(xpr.data(), + : Base((BlockRows == 0 || BlockCols == 0) ? nullptr : add_to_nullable_pointer(xpr.data(), i * ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor)) || ((BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) && ( XprTypeIsRowMajor)) ? xpr.innerStride() : xpr.outerStride())), BlockRows==1 ? 1 : xpr.rows(), @@ -373,7 +373,7 @@ class BlockImpl_dense */ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl_dense(XprType& xpr, Index startRow, Index startCol) - : Base(add_to_nullable_pointer(xpr.data(), + : Base((BlockRows == 0 || BlockCols == 0) ? nullptr : add_to_nullable_pointer(xpr.data(), xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol))), m_xpr(xpr), m_startRow(startRow), m_startCol(startCol) { @@ -386,7 +386,7 @@ class BlockImpl_dense BlockImpl_dense(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols) - : Base(add_to_nullable_pointer(xpr.data(), + : Base((blockRows == 0 || blockCols == 0) ? nullptr : add_to_nullable_pointer(xpr.data(), xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol)), blockRows, blockCols), m_xpr(xpr), m_startRow(startRow), m_startCol(startCol) diff --git a/Eigen/src/Core/VectorBlock.h b/Eigen/src/Core/VectorBlock.h index ee28da1fc..2715a1e30 100644 --- a/Eigen/src/Core/VectorBlock.h +++ b/Eigen/src/Core/VectorBlock.h @@ -69,8 +69,7 @@ template class VectorBlock public: EIGEN_DENSE_PUBLIC_INTERFACE(VectorBlock) EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock) - - using Base::operator=; + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(VectorBlock) /** Dynamic-size constructor */ diff --git a/test/block.cpp b/test/block.cpp index f8583c330..aba089629 100644 --- a/test/block.cpp +++ b/test/block.cpp @@ -40,14 +40,14 @@ template std::enable_if_t<((MatrixType::Flags&RowMajorBit)==0),void> check_left_top(const MatrixType& m, Index r, Index c, Index rows, Index /*unused*/) { - VERIFY_IS_EQUAL(m.leftCols(c).coeff(r+c*rows), m(r,c)); + if(c > 0) VERIFY_IS_EQUAL(m.leftCols(c).coeff(r+c*rows), m(r,c)); } template std::enable_if_t<((MatrixType::Flags&RowMajorBit)!=0),void> check_left_top(const MatrixType& m, Index r, Index c, Index /*unused*/, Index cols) { - VERIFY_IS_EQUAL(m.topRows(r).coeff(c+r*cols), m(r,c)); + if(r > 0) VERIFY_IS_EQUAL(m.topRows(r).coeff(c+r*cols), m(r,c)); } template void block(const MatrixType& m) diff --git a/test/random_matrix.cpp b/test/random_matrix.cpp index 873845f7a..a914af1b3 100644 --- a/test/random_matrix.cpp +++ b/test/random_matrix.cpp @@ -63,7 +63,7 @@ void check_generateRandomMatrixSvs(const Index rows, const Index cols, const Ind { RealVectorType svs = setupRangeSvs(diag_size, min_svs, max_svs); - MatrixType M; + MatrixType M = MatrixType::Zero(rows, cols); generateRandomMatrixSvs(svs, rows, cols, M); // validate dimensions diff --git a/test/triangular.cpp b/test/triangular.cpp index 22598696c..0578b0826 100644 --- a/test/triangular.cpp +++ b/test/triangular.cpp @@ -55,6 +55,7 @@ template void triangular_square(const MatrixType& m) r1(rows, cols), r2(rows, cols); VectorType v2 = VectorType::Random(rows); + VectorType v3 = VectorType::Zero(rows); MatrixType m1up = m1.template triangularView(); MatrixType m2up = m2.template triangularView(); @@ -96,23 +97,31 @@ template void triangular_square(const MatrixType& m) Transpose trm4(m4); // test back and forward substitution with a vector as the rhs m3 = m1.template triangularView(); - VERIFY(v2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView().solve(v2)), largerEps)); + v3 = m3.adjoint() * (m1.adjoint().template triangularView().solve(v2)); + VERIFY(v2.isApprox(v3, largerEps)); m3 = m1.template triangularView(); - VERIFY(v2.isApprox(m3.transpose() * (m1.transpose().template triangularView().solve(v2)), largerEps)); + v3 = m3.transpose() * (m1.transpose().template triangularView().solve(v2)); + VERIFY(v2.isApprox(v3, largerEps)); m3 = m1.template triangularView(); - VERIFY(v2.isApprox(m3 * (m1.template triangularView().solve(v2)), largerEps)); + v3 = m3 * (m1.template triangularView().solve(v2)); + VERIFY(v2.isApprox(v3, largerEps)); m3 = m1.template triangularView(); - VERIFY(v2.isApprox(m3.conjugate() * (m1.conjugate().template triangularView().solve(v2)), largerEps)); + v3 = m3.conjugate() * (m1.conjugate().template triangularView().solve(v2)); + VERIFY(v2.isApprox(v3, largerEps)); // test back and forward substitution with a matrix as the rhs m3 = m1.template triangularView(); - VERIFY(m2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView().solve(m2)), largerEps)); + m4 = m3.adjoint() * (m1.adjoint().template triangularView().solve(m2)); + VERIFY(m2.isApprox(m4, largerEps)); m3 = m1.template triangularView(); - VERIFY(m2.isApprox(m3.transpose() * (m1.transpose().template triangularView().solve(m2)), largerEps)); + m4 = m3.transpose() * (m1.transpose().template triangularView().solve(m2)); + VERIFY(m2.isApprox(m4, largerEps)); m3 = m1.template triangularView(); - VERIFY(m2.isApprox(m3 * (m1.template triangularView().solve(m2)), largerEps)); + m4 = m3 * (m1.template triangularView().solve(m2)); + VERIFY(m2.isApprox(m4, largerEps)); m3 = m1.template triangularView(); - VERIFY(m2.isApprox(m3.conjugate() * (m1.conjugate().template triangularView().solve(m2)), largerEps)); + m4 = m3.conjugate() * (m1.conjugate().template triangularView().solve(m2)); + VERIFY(m2.isApprox(m4, largerEps)); // check M * inv(L) using in place API m4 = m3;