diff --git a/src/util/fast_idiv_by_const.c b/src/util/fast_idiv_by_const.c index 7b93316268c..4f0f6b769b8 100644 --- a/src/util/fast_idiv_by_const.c +++ b/src/util/fast_idiv_by_const.c @@ -172,7 +172,7 @@ util_compute_fast_udiv_info(uint64_t D, unsigned num_bits, unsigned UINT_BITS) static inline int64_t sign_extend(int64_t x, unsigned SINT_BITS) { - return (x << (64 - SINT_BITS)) >> (64 - SINT_BITS); + return (int64_t)((uint64_t)x << (64 - SINT_BITS)) >> (64 - SINT_BITS); } struct util_fast_sdiv_info diff --git a/src/util/tests/fast_idiv_by_const/fast_idiv_by_const_test.cpp b/src/util/tests/fast_idiv_by_const/fast_idiv_by_const_test.cpp index b0b3669e73b..222346230e4 100644 --- a/src/util/tests/fast_idiv_by_const/fast_idiv_by_const_test.cpp +++ b/src/util/tests/fast_idiv_by_const/fast_idiv_by_const_test.cpp @@ -48,7 +48,7 @@ strunc(int64_t x, unsigned num_bits) if (num_bits == 64) return x; - return (x << (64 - num_bits)) >> (64 - num_bits); + return (int64_t)((uint64_t)x << (64 - num_bits)) >> (64 - num_bits); } static inline bool