mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user