diff options
author | HÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com> | 2022-06-20 15:04:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-20 15:04:45 +0200 |
commit | f8fa54808bdd8bb58aad59dadc6f3d362178e3fe (patch) | |
tree | 84153fa0cfcb552fbe492d34a5828f38cb6b4a69 /searchlib | |
parent | f12428abee200c30464564883511c07f232ada57 (diff) | |
parent | 748b6381a8bd9eba48a2cb70eace21d0456c2202 (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.cpp | 9 |
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) & |