From 0e607fd350b7ee75c274b79d980d2b0f4b50827f Mon Sep 17 00:00:00 2001 From: Antonio Sanchez Date: Tue, 18 Feb 2025 10:41:23 -0800 Subject: [PATCH] Fix c++03 build and tests --- Eigen/src/Core/GenericPacketMath.h | 24 ++++++++++++------------ test/CMakeLists.txt | 6 +++--- test/packetmath.cpp | 26 +++++++++++++------------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h index 228b5b268..af45f3936 100644 --- a/Eigen/src/Core/GenericPacketMath.h +++ b/Eigen/src/Core/GenericPacketMath.h @@ -160,7 +160,7 @@ struct eigen_packet_wrapper { EIGEN_ALWAYS_INLINE operator T&() { return m_val; } EIGEN_ALWAYS_INLINE operator const T&() const { return m_val; } - EIGEN_ALWAYS_INLINE eigen_packet_wrapper() = default; + EIGEN_ALWAYS_INLINE eigen_packet_wrapper() {}; EIGEN_ALWAYS_INLINE eigen_packet_wrapper(const T &v) : m_val(v) {} EIGEN_ALWAYS_INLINE eigen_packet_wrapper& operator=(const T &v) { m_val = v; @@ -258,7 +258,7 @@ struct ptrue_impl { // uses a comparison to zero, so this should still work in most cases. We don't // have another option, since the scalar type requires initialization. template -struct ptrue_impl::value && NumTraits::RequireInitialization>::type > { static EIGEN_DEVICE_FUNC inline T run(const T& /*a*/){ return T(1); @@ -356,16 +356,16 @@ struct bytewise_bitwise_helper { EIGEN_DEVICE_FUNC static inline T bitwise_and(const T& a, const T& b) { return binary(a, b, bit_and()); } - EIGEN_DEVICE_FUNC static inline T bitwise_or(const T& a, const T& b) { + EIGEN_DEVICE_FUNC static inline T bitwise_or(const T& a, const T& b) { return binary(a, b, bit_or()); } EIGEN_DEVICE_FUNC static inline T bitwise_xor(const T& a, const T& b) { return binary(a, b, bit_xor()); } - EIGEN_DEVICE_FUNC static inline T bitwise_not(const T& a) { + EIGEN_DEVICE_FUNC static inline T bitwise_not(const T& a) { return unary(a,bit_not()); } - + private: template EIGEN_DEVICE_FUNC static inline T unary(const T& a, Op op) { @@ -440,7 +440,7 @@ struct pselect_impl { // For scalars, use ternary select. template -struct pselect_impl::value>::type > { static EIGEN_DEVICE_FUNC inline Packet run(const Packet& mask, const Packet& a, const Packet& b) { return numext::equal_strict(mask, Packet(0)) ? b : a; @@ -807,7 +807,7 @@ Packet plog10(const Packet& a) { EIGEN_USING_STD(log10); return log10(a); } template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2(const Packet& a) { typedef typename internal::unpacket_traits::type Scalar; - return pmul(pset1(Scalar(EIGEN_LOG2E)), plog(a)); + return pmul(pset1(Scalar(EIGEN_LOG2E)), plog(a)); } /** \internal \returns the square-root of \a a (coeff-wise) */ @@ -881,7 +881,7 @@ predux(const Packet& a) template EIGEN_DEVICE_FUNC inline typename unpacket_traits::type predux_mul( const Packet& a) { - typedef typename unpacket_traits::type Scalar; + typedef typename unpacket_traits::type Scalar; return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmul))); } @@ -889,14 +889,14 @@ EIGEN_DEVICE_FUNC inline typename unpacket_traits::type predux_mul( template EIGEN_DEVICE_FUNC inline typename unpacket_traits::type predux_min( const Packet &a) { - typedef typename unpacket_traits::type Scalar; + typedef typename unpacket_traits::type Scalar; return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmin))); } template EIGEN_DEVICE_FUNC inline typename unpacket_traits::type predux_min( const Packet& a) { - typedef typename unpacket_traits::type Scalar; + typedef typename unpacket_traits::type Scalar; return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmin))); } @@ -904,14 +904,14 @@ EIGEN_DEVICE_FUNC inline typename unpacket_traits::type predux_min( template EIGEN_DEVICE_FUNC inline typename unpacket_traits::type predux_max( const Packet &a) { - typedef typename unpacket_traits::type Scalar; + typedef typename unpacket_traits::type Scalar; return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmax))); } template EIGEN_DEVICE_FUNC inline typename unpacket_traits::type predux_max( const Packet& a) { - typedef typename unpacket_traits::type Scalar; + typedef typename unpacket_traits::type Scalar; return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmax))); } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 97ddbbc99..7ce260e0e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -132,7 +132,7 @@ else() endif() find_package(SPQR) -if(SPQR_FOUND AND CHOLMOD_FOUND AND EIGEN_BUILD_BLAS AND EIGEN_BUILD_LAPACK AND (EIGEN_Fortran_COMPILER_WORKS OR LAPACK_FOUND) ) +if(SPQR_FOUND AND EIGEN_TEST_CXX11 AND CHOLMOD_FOUND AND EIGEN_BUILD_BLAS AND EIGEN_BUILD_LAPACK AND (EIGEN_Fortran_COMPILER_WORKS OR LAPACK_FOUND) ) add_definitions("-DEIGEN_SPQR_SUPPORT") include_directories(${SPQR_INCLUDES}) set(SPQR_ALL_LIBS ${SPQR_LIBRARIES} ${CHOLMOD_LIBRARIES} ${EIGEN_LAPACK_LIBRARIES} ${EIGEN_BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) @@ -326,7 +326,7 @@ if(PASTIX_FOUND AND (SCOTCH_FOUND OR METIS_FOUND)) ei_add_test(pastix_support "" "${PASTIX_ALL_LIBS}") endif() -if(SPQR_FOUND AND CHOLMOD_FOUND AND EIGEN_BUILD_BLAS AND EIGEN_BUILD_LAPACK) +if(SPQR_FOUND AND EIGEN_TEST_CXX11 AND CHOLMOD_FOUND AND EIGEN_BUILD_BLAS AND EIGEN_BUILD_LAPACK) ei_add_test(spqr_support "" "${SPQR_ALL_LIBS}") endif() @@ -358,7 +358,7 @@ endif() # boost MP unit test find_package(Boost 1.53.0) -if(Boost_FOUND) +if(Boost_FOUND AND EIGEN_TEST_CXX11) include_directories(${Boost_INCLUDE_DIRS}) ei_add_test(boostmultiprec "" "${Boost_LIBRARIES}") ei_add_property(EIGEN_TESTED_BACKENDS "Boost.Multiprecision, ") diff --git a/test/packetmath.cpp b/test/packetmath.cpp index 2940d944f..09dbccedb 100644 --- a/test/packetmath.cpp +++ b/test/packetmath.cpp @@ -52,7 +52,7 @@ inline T REF_FREXP(const T& x, T& exp) { EIGEN_USING_STD(frexp) const T out = static_cast(frexp(x, &iexp)); exp = static_cast(iexp); - + // The exponent value is unspecified if the input is inf or NaN, but MSVC // seems to set it to 1. We need to set it back to zero for consistency. if (!(numext::isfinite)(x)) { @@ -362,7 +362,7 @@ void packetmath_minus_zero_add() { EIGEN_ALIGN_MAX Scalar data1[size] = {}; EIGEN_ALIGN_MAX Scalar data2[size] = {}; EIGEN_ALIGN_MAX Scalar ref[size] = {}; - + for (int i = 0; i < PacketSize; ++i) { data1[i] = Scalar(-0.0); data1[i + PacketSize] = Scalar(-0.0); @@ -652,10 +652,10 @@ void packetmath_test_IEEE_corner_cases(const RefFunctorT& ref_fun, const Scalar norm_min = (std::numeric_limits::min)(); const Scalar norm_max = (std::numeric_limits::max)(); - constexpr int size = PacketSize * 2; - EIGEN_ALIGN_MAX Scalar data1[size]; - EIGEN_ALIGN_MAX Scalar data2[size]; - EIGEN_ALIGN_MAX Scalar ref[size]; + const int size = PacketSize * 2; + EIGEN_ALIGN_MAX Scalar data1[PacketSize * 2]; + EIGEN_ALIGN_MAX Scalar data2[PacketSize * 2]; + EIGEN_ALIGN_MAX Scalar ref[PacketSize * 2]; for (int i = 0; i < size; ++i) { data1[i] = data2[i] = ref[i] = Scalar(0); } @@ -719,7 +719,7 @@ void packetmath_real() { EIGEN_ALIGN_MAX Scalar data1[PacketSize * 4] = {}; EIGEN_ALIGN_MAX Scalar data2[PacketSize * 4] = {}; EIGEN_ALIGN_MAX Scalar ref[PacketSize * 4] = {}; - + // Negate with -0. if (PacketTraits::HasNegate) { test::packet_helper h; @@ -755,7 +755,7 @@ void packetmath_real() { CHECK_CWISE1_EXACT_IF(PacketTraits::HasRint, numext::rint, internal::print); packetmath_boolean_mask_ops_real(); - + // Rounding edge cases. if (PacketTraits::HasRound || PacketTraits::HasCeil || PacketTraits::HasFloor || PacketTraits::HasRint) { typedef typename internal::make_integer::type IntType; @@ -788,7 +788,7 @@ void packetmath_real() { values.push_back(NumTraits::infinity()); values.push_back(-NumTraits::infinity()); values.push_back(NumTraits::quiet_NaN()); - + for (size_t k=0; k(-87, 88)); } CHECK_CWISE1_IF(PacketTraits::HasExp, std::exp, internal::pexp); - + CHECK_CWISE1_BYREF1_IF(PacketTraits::HasExp, REF_FREXP, internal::pfrexp); if (PacketTraits::HasExp) { // Check denormals: @@ -826,12 +826,12 @@ void packetmath_real() { // zero data1[0] = Scalar(0); CHECK_CWISE1_BYREF1_IF(PacketTraits::HasExp, REF_FREXP, internal::pfrexp); - + // inf and NaN only compare output fraction, not exponent. test::packet_helper h; Packet pout; Scalar sout; - Scalar special[] = { NumTraits::infinity(), + Scalar special[] = { NumTraits::infinity(), -NumTraits::infinity(), NumTraits::quiet_NaN()}; for (int i=0; i<3; ++i) { @@ -841,7 +841,7 @@ void packetmath_real() { VERIFY(test::areApprox(ref, data2, 1) && "internal::pfrexp"); } } - + for (int i = 0; i < PacketSize; ++i) { data1[i] = Scalar(internal::random(-1, 1)); data2[i] = Scalar(internal::random(-1, 1));