From 00f2acba36bfe882e8e64a0115d6da31922bab91 Mon Sep 17 00:00:00 2001 From: Elliot Gorokhovsky Date: Tue, 15 Feb 2022 11:41:09 -0500 Subject: [PATCH] Add back check to prevent Win32 static analysis issues --- lib/common/bits.h | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/common/bits.h b/lib/common/bits.h index 07b4e4dca..191e68a78 100644 --- a/lib/common/bits.h +++ b/lib/common/bits.h @@ -32,9 +32,14 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros32(U32 val) # if STATIC_BMI2 == 1 return _tzcnt_u32(val); # else - unsigned long r; - _BitScanForward(&r, val); - return (unsigned)r; + if (val != 0) { + unsigned long r; + _BitScanForward(&r, val); + return (unsigned)r; + } else { + /* Should not reach this code path */ + __assume(0); + } # endif # elif defined(__GNUC__) && (__GNUC__ >= 4) return (unsigned)__builtin_ctz(val); @@ -62,9 +67,14 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros32(U32 val) # if STATIC_BMI2 == 1 return _lzcnt_u32(val); # else - unsigned long r; - _BitScanReverse(&r, val); - return (unsigned)(r ^ 31); + if (val != 0) { + unsigned long r; + _BitScanReverse(&r, val); + return (unsigned)(r ^ 31); + } else { + /* Should not reach this code path */ + __assume(0); + } # endif # elif defined(__GNUC__) && (__GNUC__ >= 4) return (unsigned)__builtin_clz(val); @@ -80,9 +90,14 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros64(U64 val) # if STATIC_BMI2 == 1 return _tzcnt_u64(val); # else - unsigned long r; - _BitScanForward64(&r, val); - return (unsigned)r; + if (val != 0) { + unsigned long r; + _BitScanForward64(&r, val); + return (unsigned)r; + } else { + /* Should not reach this code path */ + __assume(0); + } # endif # elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(__LP64__) return (unsigned)__builtin_ctzll(val); @@ -106,9 +121,14 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros64(U64 val) # if STATIC_BMI2 == 1 return _lzcnt_u64(val); # else - unsigned long r; - _BitScanReverse64(&r, val); - return (unsigned)(r ^ 63); + if (val != 0) { + unsigned long r; + _BitScanReverse64(&r, val); + return (unsigned)(r ^ 63); + } else { + /* Should not reach this code path */ + __assume(0); + } # endif # elif defined(__GNUC__) && (__GNUC__ >= 4) return (unsigned)(__builtin_clzll(val)); -- 2.47.3