aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com>2022-06-20 15:04:45 +0200
committerGitHub <noreply@github.com>2022-06-20 15:04:45 +0200
commitf8fa54808bdd8bb58aad59dadc6f3d362178e3fe (patch)
tree84153fa0cfcb552fbe492d34a5828f38cb6b4a69 /searchlib
parentf12428abee200c30464564883511c07f232ada57 (diff)
parent748b6381a8bd9eba48a2cb70eace21d0456c2202 (diff)
Merge pull request #23167 from vespa-engine/havardpe/avoid-some-undefined-shifting
avoid undefined shift
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/bitcompression/compression.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/bitcompression/compression.cpp b/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
index 5ac506e4fc2..b60250256f4 100644
--- a/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
+++ b/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
@@ -98,8 +98,7 @@ EncodeContext64EBase<false>::writeBits(uint64_t data, uint32_t length)
// Shift new bits into cacheInt
_cacheInt |= (data << (64 - _cacheFree));
*_valI++ = bswap(_cacheInt);
-
- data >>= _cacheFree;
+ data = (_cacheFree < 64) ? data >> _cacheFree : 0;
// Initialize variables for receiving new bits
length -= _cacheFree;
_cacheInt = 0;
@@ -194,9 +193,9 @@ writeBits(const uint64_t *bits, uint32_t bitOffset, uint32_t bitLength)
if (bitOffset + bitLength < 64) {
uint32_t length = bitLength;
if (bigEndian) {
- uint64_t data = (EC::bswap(*bits) >>
- (64 - bitOffset - length)) &
- CodingTables::_intMask64[length];
+ uint64_t data = ((bitOffset + length) > 0)
+ ? (EC::bswap(*bits) >> (64 - bitOffset - length)) & CodingTables::_intMask64[length]
+ : 0;
UC64BE_WRITEBITS_NS(o, EC);
} else {
uint64_t data = (EC::bswap(*bits) >> bitOffset) &