Fix sanitizer regressions in sparse serializer and packet tests

libeigen/eigen!2319

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
Rasmus Munk Larsen
2026-03-22 09:10:16 -07:00
parent 835e5615a9
commit 6490b17e6f
7 changed files with 129 additions and 52 deletions

View File

@@ -12,13 +12,21 @@
#include "random_without_cast_overflow.h"
// suppress annoying unsigned integer warnings
template <typename Scalar, bool IsSigned = NumTraits<Scalar>::IsSigned>
template <typename Scalar, bool IsSignedInteger = NumTraits<Scalar>::IsSigned && NumTraits<Scalar>::IsInteger,
bool IsSigned = NumTraits<Scalar>::IsSigned>
struct negative_or_zero_impl {
static Scalar run(const Scalar& a) {
using UnsignedScalar = std::make_unsigned_t<Scalar>;
return static_cast<Scalar>(UnsignedScalar(0) - static_cast<UnsignedScalar>(a));
}
};
template <typename Scalar>
struct negative_or_zero_impl<Scalar, false, true> {
static Scalar run(const Scalar& a) { return -a; }
};
template <typename Scalar>
struct negative_or_zero_impl<Scalar, false> {
static Scalar run(const Scalar&) { return 0; }
struct negative_or_zero_impl<Scalar, false, false> {
static Scalar run(const Scalar&) { return Scalar(0); }
};
template <typename Scalar>
Scalar negative_or_zero(const Scalar& a) {