diff --git a/libc/src/__support/CPP/bit.h b/libc/src/__support/CPP/bit.h index adcd0472747d0..82b9eb5128262 100644 --- a/libc/src/__support/CPP/bit.h +++ b/libc/src/__support/CPP/bit.h @@ -232,7 +232,7 @@ rotl(T value, int rotate) { return value; if (rotate < 0) return cpp::rotr(value, -rotate); - return (value << rotate) | (value >> (N - rotate)); + return static_cast((value << rotate) | (value >> (N - rotate))); } template @@ -244,7 +244,7 @@ rotr(T value, int rotate) { return value; if (rotate < 0) return cpp::rotl(value, -rotate); - return (value >> rotate) | (value << (N - rotate)); + return static_cast((value >> rotate) | (value << (N - rotate))); } // TODO: Do we need this function at all? How is it different from diff --git a/libc/test/src/__support/CPP/bit_test.cpp b/libc/test/src/__support/CPP/bit_test.cpp index 9429b66ad1f98..1f2315281bc1d 100644 --- a/libc/test/src/__support/CPP/bit_test.cpp +++ b/libc/test/src/__support/CPP/bit_test.cpp @@ -41,7 +41,8 @@ TYPED_TEST(LlvmLibcBitTest, HasSingleBit, UnsignedTypes) { constexpr auto LSB = T(1); constexpr auto MSB = T(~(ALL_ONES >> 1)); for (T value = 1; value; value <<= 1) { - auto two_bits_value = value | ((value <= MIDPOINT) ? MSB : LSB); + T two_bits_value = + static_cast(value | ((value <= MIDPOINT) ? MSB : LSB)); EXPECT_FALSE(has_single_bit(two_bits_value)); } }