[libc-commits] [libc] [libc] Enable -Wconversion (PR #127523)
Vinay Deshmukh via libc-commits
libc-commits at lists.llvm.org
Tue Feb 25 19:39:06 PST 2025
https://github.com/vinay-deshmukh updated https://github.com/llvm/llvm-project/pull/127523
>From 338a9c070c390c5b9ff05777750510166919f308 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Mon, 17 Feb 2025 12:07:47 -0500
Subject: [PATCH 01/52] Enable -Wconversion
---
libc/cmake/modules/LLVMLibCTestRules.cmake | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index f33db5826537b..75eb1a06332ac 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -36,7 +36,7 @@ function(_get_common_test_compile_options output_var c_test flags)
if(NOT LIBC_WNO_ERROR)
# list(APPEND compile_options "-Werror")
endif()
- # list(APPEND compile_options "-Wconversion")
+ list(APPEND compile_options "-Wconversion")
# list(APPEND compile_options "-Wno-sign-conversion")
list(APPEND compile_options "-Wimplicit-fallthrough")
list(APPEND compile_options "-Wwrite-strings")
>From 2ff79ef22c5f0f6f4a8d631ea0d91291d98ac88f Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 12:33:08 -0500
Subject: [PATCH 02/52] bit.h
---
libc/src/__support/CPP/bit.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libc/src/__support/CPP/bit.h b/libc/src/__support/CPP/bit.h
index 82b9eb5128262..31d2cc337750a 100644
--- a/libc/src/__support/CPP/bit.h
+++ b/libc/src/__support/CPP/bit.h
@@ -126,7 +126,7 @@ countl_zero(T value) {
}
#else
template <typename T>
-[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, int>
+[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, unsigned int>
countl_zero(T value) {
if (!value)
return cpp::numeric_limits<T>::digits;
@@ -183,7 +183,7 @@ countr_one(T value) {
///
/// Ex. bit_width(5) == 3.
template <typename T>
-[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, int>
+[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, unsigned int>
bit_width(T value) {
return cpp::numeric_limits<T>::digits - cpp::countl_zero(value);
}
>From b307e58f9193e806d6236902bebac48385d1f1b7 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 12:33:25 -0500
Subject: [PATCH 03/52] string_view.h
---
libc/src/__support/CPP/string_view.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/string_view.h b/libc/src/__support/CPP/string_view.h
index 745c62c35f0a0..635eb1a1252c1 100644
--- a/libc/src/__support/CPP/string_view.h
+++ b/libc/src/__support/CPP/string_view.h
@@ -12,6 +12,7 @@
#include "src/__support/common.h"
#include "src/__support/macros/config.h"
+#include <cstdint>
#include <stddef.h>
namespace LIBC_NAMESPACE_DECL {
@@ -61,7 +62,7 @@ class string_view {
// special value equal to the maximum value representable by the type
// size_type.
- LIBC_INLINE_VAR static constexpr size_t npos = -1;
+ LIBC_INLINE_VAR static constexpr size_t npos = SIZE_MAX;
LIBC_INLINE constexpr string_view() : Data(nullptr), Len(0) {}
>From e54ac9e245158ee6d7964bc2915a55027e1624f5 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 12:33:36 -0500
Subject: [PATCH 04/52] utils.h
---
libc/src/string/memory_utils/utils.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/string/memory_utils/utils.h b/libc/src/string/memory_utils/utils.h
index 5c9bc72208f85..434dafb4dbab2 100644
--- a/libc/src/string/memory_utils/utils.h
+++ b/libc/src/string/memory_utils/utils.h
@@ -293,7 +293,7 @@ LIBC_INLINE void store64_aligned(uint64_t value, Ptr dst, size_t offset) {
// Advances the pointers p1 and p2 by offset bytes and decrease count by the
// same amount.
template <typename T1, typename T2>
-LIBC_INLINE void adjust(ptrdiff_t offset, T1 *__restrict &p1,
+LIBC_INLINE void adjust(uintptr_t offset, T1 *__restrict &p1,
T2 *__restrict &p2, size_t &count) {
p1 += offset;
p2 += offset;
>From 2cb08dce4e2b68929a5597d07efb62a6a5bea4cd Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 12:41:45 -0500
Subject: [PATCH 05/52] undefined if end is not after start anyway
---
libc/src/__support/CPP/string_view.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/string_view.h b/libc/src/__support/CPP/string_view.h
index 635eb1a1252c1..914a7225ae867 100644
--- a/libc/src/__support/CPP/string_view.h
+++ b/libc/src/__support/CPP/string_view.h
@@ -41,7 +41,7 @@ class string_view {
LIBC_INLINE static constexpr size_t length(const char *Str) {
for (const char *End = Str;; ++End)
if (*End == '\0')
- return End - Str;
+ return static_cast<size_t>(End - Str);
}
LIBC_INLINE bool equals(string_view Other) const {
>From 29a15a648be3716ac32e35c7fe7d827ea5ac70db Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 12:42:00 -0500
Subject: [PATCH 06/52] "count" is always unsigned/size_t
---
libc/src/__support/big_int.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index fb5ad99d53e7b..2bc1393996097 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -311,8 +311,8 @@ LIBC_INLINE constexpr cpp::array<word, N> shift(cpp::array<word, N> array,
#define DECLARE_COUNTBIT(NAME, INDEX_EXPR) \
template <typename word, size_t N> \
- LIBC_INLINE constexpr int NAME(const cpp::array<word, N> &val) { \
- int bit_count = 0; \
+ LIBC_INLINE constexpr size_t NAME(const cpp::array<word, N> &val) { \
+ size_t bit_count = 0; \
for (size_t i = 0; i < N; ++i) { \
const int word_count = cpp::NAME<word>(val[INDEX_EXPR]); \
bit_count += word_count; \
@@ -1007,7 +1007,7 @@ struct BigInt {
BigInt quotient;
if (remainder >= divider) {
BigInt subtractor = divider;
- int cur_bit = multiword::countl_zero(subtractor.val) -
+ size_t cur_bit = multiword::countl_zero(subtractor.val) -
multiword::countl_zero(remainder.val);
subtractor <<= cur_bit;
for (; cur_bit >= 0 && remainder > 0; --cur_bit, subtractor >>= 1) {
>From a573f7f3fc8d6ca4f174fbe0b31f8ad155aa0f23 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 12:50:44 -0500
Subject: [PATCH 07/52] index is size_t
---
libc/src/__support/big_int.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index 2bc1393996097..54aa9ebb26dd7 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -272,15 +272,15 @@ LIBC_INLINE constexpr cpp::array<word, N> shift(cpp::array<word, N> array,
if (LIBC_UNLIKELY(offset == 0))
return array;
const bool is_neg = is_signed && is_negative(array);
- constexpr auto at = [](size_t index) -> int {
+ constexpr auto at = [](size_t index) -> size_t {
// reverse iteration when direction == LEFT.
if constexpr (direction == LEFT)
- return int(N) - int(index) - 1;
- return int(index);
+ return N - index - 1;
+ return index;
};
const auto safe_get_at = [&](size_t index) -> word {
// return appropriate value when accessing out of bound elements.
- const int i = at(index);
+ const size_t i = at(index);
if (i < 0)
return 0;
if (i >= int(N))
>From 3043de57e172fba1468edadd05a5906e77e899c7 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 13:02:01 -0500
Subject: [PATCH 08/52] -1 == max
---
libc/src/__support/big_int.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index 54aa9ebb26dd7..534edd315d561 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -284,7 +284,7 @@ LIBC_INLINE constexpr cpp::array<word, N> shift(cpp::array<word, N> array,
if (i < 0)
return 0;
if (i >= int(N))
- return is_neg ? -1 : 0;
+ return is_neg ? cpp::numeric_limits<word>::max(); : 0;
return array[i];
};
const size_t index_offset = offset / WORD_BITS;
>From 439f3307981345b3d62f90dea272434604627904 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 13:02:29 -0500
Subject: [PATCH 09/52] char == uint8_t
---
libc/src/__support/CPP/string.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/libc/src/__support/CPP/string.h b/libc/src/__support/CPP/string.h
index dbc0ae04e5e6f..e38a0b3496c54 100644
--- a/libc/src/__support/CPP/string.h
+++ b/libc/src/__support/CPP/string.h
@@ -67,6 +67,7 @@ class string {
: string(cstr, ::LIBC_NAMESPACE::internal::string_length(cstr)) {}
LIBC_INLINE string(size_t size_, char value) {
resize(size_);
+ static_assert(sizeof(char) == sizeof(uint8_t));
inline_memset((void *)buffer_, value, size_);
}
>From ecced049bbce3b2e21866c586bcbd38535a91e92 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 13:08:08 -0500
Subject: [PATCH 10/52] size_t not int
---
libc/src/__support/big_int.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index 534edd315d561..7e225aef34256 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -314,7 +314,7 @@ LIBC_INLINE constexpr cpp::array<word, N> shift(cpp::array<word, N> array,
LIBC_INLINE constexpr size_t NAME(const cpp::array<word, N> &val) { \
size_t bit_count = 0; \
for (size_t i = 0; i < N; ++i) { \
- const int word_count = cpp::NAME<word>(val[INDEX_EXPR]); \
+ const size_t word_count = cpp::NAME<word>(val[INDEX_EXPR]); \
bit_count += word_count; \
if (word_count != cpp::numeric_limits<word>::digits) \
break; \
>From 6feebdb12282f761d67e5a2292b86b271a3e99d8 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 13:08:31 -0500
Subject: [PATCH 11/52] cast
---
libc/src/string/string_utils.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/string/string_utils.h b/libc/src/string/string_utils.h
index 583d35014d398..f4abe1c4d5b7c 100644
--- a/libc/src/string/string_utils.h
+++ b/libc/src/string/string_utils.h
@@ -66,7 +66,7 @@ LIBC_INLINE size_t string_length_wide_read(const char *src) {
for (; reinterpret_cast<uintptr_t>(char_ptr) % sizeof(Word) != 0;
++char_ptr) {
if (*char_ptr == '\0')
- return char_ptr - src;
+ return static_cast<size_t>(char_ptr - src);
}
// Step 2: read blocks
for (const Word *block_ptr = reinterpret_cast<const Word *>(char_ptr);
>From a5f3a1f434eda7104b356c8871614404e8d08b7e Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 14:04:15 -0500
Subject: [PATCH 12/52] libc/src/string/string_utils
---
libc/src/string/string_utils.h | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/libc/src/string/string_utils.h b/libc/src/string/string_utils.h
index f4abe1c4d5b7c..d1fe65f71f1a0 100644
--- a/libc/src/string/string_utils.h
+++ b/libc/src/string/string_utils.h
@@ -77,7 +77,7 @@ LIBC_INLINE size_t string_length_wide_read(const char *src) {
for (; *char_ptr != '\0'; ++char_ptr) {
;
}
- return char_ptr - src;
+ return static_cast<size_t>(char_ptr - src);
}
// Returns the length of a string, denoted by the first occurrence
@@ -169,7 +169,7 @@ LIBC_INLINE size_t complementary_span(const char *src, const char *segment) {
for (; *src && !bitset.test(*reinterpret_cast<const unsigned char *>(src));
++src)
;
- return src - initial;
+ return static_cast<size_t>(src - initial);
}
// Given the similarities between strtok and strtok_r, we can implement both
@@ -189,12 +189,13 @@ LIBC_INLINE char *string_token(char *__restrict src,
if (LIBC_UNLIKELY(src == nullptr && ((src = *saveptr) == nullptr)))
return nullptr;
+ static_assert(sizeof(char) == sizeof(cpp::byte), "bitset of 256 assumes char is 8 bits");
cpp::bitset<256> delimiter_set;
for (; *delimiter_string != '\0'; ++delimiter_string)
- delimiter_set.set(*delimiter_string);
+ delimiter_set.set(static_cast<size_t>(*delimiter_string));
if constexpr (SkipDelim)
- for (; *src != '\0' && delimiter_set.test(*src); ++src)
+ for (; *src != '\0' && delimiter_set.test(static_cast<size_t>(*src)); ++src)
;
if (*src == '\0') {
*saveptr = src;
@@ -202,7 +203,7 @@ LIBC_INLINE char *string_token(char *__restrict src,
}
char *token = src;
for (; *src != '\0'; ++src) {
- if (delimiter_set.test(*src)) {
+ if (delimiter_set.test(static_cast<size_t>(*src))) {
*src = '\0';
++src;
break;
>From 32f26cc0287a8490ab0faddb1b7135955374e960 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 14:16:19 -0500
Subject: [PATCH 13/52] string.h
---
libc/src/__support/CPP/string.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/string.h b/libc/src/__support/CPP/string.h
index e38a0b3496c54..1ac04c7f1f9dc 100644
--- a/libc/src/__support/CPP/string.h
+++ b/libc/src/__support/CPP/string.h
@@ -68,7 +68,7 @@ class string {
LIBC_INLINE string(size_t size_, char value) {
resize(size_);
static_assert(sizeof(char) == sizeof(uint8_t));
- inline_memset((void *)buffer_, value, size_);
+ inline_memset((void *)buffer_, static_cast<uint8_t>(value), size_);
}
LIBC_INLINE string &operator=(const string &other) {
>From b2939976bd3191a47dc17d90bb1b0043484f9f94 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 14:20:01 -0500
Subject: [PATCH 14/52] typo in big_int.h
---
libc/src/__support/big_int.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index 7e225aef34256..cd922c061c474 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -284,7 +284,7 @@ LIBC_INLINE constexpr cpp::array<word, N> shift(cpp::array<word, N> array,
if (i < 0)
return 0;
if (i >= int(N))
- return is_neg ? cpp::numeric_limits<word>::max(); : 0;
+ return is_neg ? cpp::numeric_limits<word>::max() : 0;
return array[i];
};
const size_t index_offset = offset / WORD_BITS;
>From 6f596d7b31052a7b60300c0b8c413db759db4005 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 14:20:25 -0500
Subject: [PATCH 15/52] numeric_limits
---
libc/src/__support/CPP/span.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/span.h b/libc/src/__support/CPP/span.h
index a41c9b744e370..4bb27932b6f74 100644
--- a/libc/src/__support/CPP/span.h
+++ b/libc/src/__support/CPP/span.h
@@ -11,6 +11,7 @@
#include <stddef.h> // For size_t
#include "array.h" // For array
+#include "limits.h"
#include "src/__support/macros/config.h"
#include "type_traits.h" // For remove_cv_t, enable_if_t, is_same_v, is_const_v
@@ -48,7 +49,7 @@ template <typename T> class span {
using const_reference = const T &;
using iterator = T *;
- LIBC_INLINE_VAR static constexpr size_type dynamic_extent = -1;
+ LIBC_INLINE_VAR static constexpr size_type dynamic_extent = cpp::numeric_limits<size_type>::max();
LIBC_INLINE constexpr span() : span_data(nullptr), span_size(0) {}
>From cd9e931c6c5a17504d1b1250035ab6a2f1fa4d29 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 14:35:16 -0500
Subject: [PATCH 16/52] back to original bit.h
---
libc/src/__support/CPP/bit.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/bit.h b/libc/src/__support/CPP/bit.h
index 31d2cc337750a..38a71df252123 100644
--- a/libc/src/__support/CPP/bit.h
+++ b/libc/src/__support/CPP/bit.h
@@ -126,7 +126,7 @@ countl_zero(T value) {
}
#else
template <typename T>
-[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, unsigned int>
+[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, int>
countl_zero(T value) {
if (!value)
return cpp::numeric_limits<T>::digits;
>From 620e028b1d2e0a647bf2efe9ba1cda281399985c Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 15:07:59 -0500
Subject: [PATCH 17/52] Kind of done with bit etc
---
libc/src/__support/CPP/bit.h | 6 +++---
libc/src/__support/big_int.h | 16 ++++++++--------
libc/src/__support/integer_literals.h | 2 +-
libc/src/__support/integer_to_string.h | 4 ++--
libc/test/src/__support/big_int_test.cpp | 8 ++++----
5 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/libc/src/__support/CPP/bit.h b/libc/src/__support/CPP/bit.h
index 38a71df252123..b59fe2d41cd14 100644
--- a/libc/src/__support/CPP/bit.h
+++ b/libc/src/__support/CPP/bit.h
@@ -101,7 +101,7 @@ countr_zero(T value) {
shift >>= 1;
mask >>= shift;
}
- return zero_bits;
+ return static_cast<int>(zero_bits);
}
#if __has_builtin(__builtin_ctzs)
ADD_SPECIALIZATION(countr_zero, unsigned short, __builtin_ctzs)
@@ -140,7 +140,7 @@ countl_zero(T value) {
else
zero_bits |= shift;
}
- return zero_bits;
+ return static_cast<int>(zero_bits);
}
#if __has_builtin(__builtin_clzs)
ADD_SPECIALIZATION(countl_zero, unsigned short, __builtin_clzs)
@@ -183,7 +183,7 @@ countr_one(T value) {
///
/// Ex. bit_width(5) == 3.
template <typename T>
-[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, unsigned int>
+[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, int>
bit_width(T value) {
return cpp::numeric_limits<T>::digits - cpp::countl_zero(value);
}
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index cd922c061c474..c4a0ecc9176e8 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -311,10 +311,10 @@ LIBC_INLINE constexpr cpp::array<word, N> shift(cpp::array<word, N> array,
#define DECLARE_COUNTBIT(NAME, INDEX_EXPR) \
template <typename word, size_t N> \
- LIBC_INLINE constexpr size_t NAME(const cpp::array<word, N> &val) { \
- size_t bit_count = 0; \
+ LIBC_INLINE constexpr int NAME(const cpp::array<word, N> &val) { \
+ int bit_count = 0; \
for (size_t i = 0; i < N; ++i) { \
- const size_t word_count = cpp::NAME<word>(val[INDEX_EXPR]); \
+ const int word_count = cpp::NAME<word>(val[INDEX_EXPR]); \
bit_count += word_count; \
if (word_count != cpp::numeric_limits<word>::digits) \
break; \
@@ -697,7 +697,7 @@ struct BigInt {
}
BigInt quotient;
WordType x_word = static_cast<WordType>(x);
- constexpr size_t LOG2_WORD_SIZE = cpp::bit_width(WORD_SIZE) - 1;
+ constexpr size_t LOG2_WORD_SIZE = static_cast<size_t>(cpp::bit_width(WORD_SIZE) - 1);
constexpr size_t HALF_WORD_SIZE = WORD_SIZE >> 1;
constexpr WordType HALF_MASK = ((WordType(1) << HALF_WORD_SIZE) - 1);
// lower = smallest multiple of WORD_SIZE that is >= e.
@@ -1007,8 +1007,8 @@ struct BigInt {
BigInt quotient;
if (remainder >= divider) {
BigInt subtractor = divider;
- size_t cur_bit = multiword::countl_zero(subtractor.val) -
- multiword::countl_zero(remainder.val);
+ size_t cur_bit = static_cast<size_t>(multiword::countl_zero(subtractor.val) -
+ multiword::countl_zero(remainder.val));
subtractor <<= cur_bit;
for (; cur_bit >= 0 && remainder > 0; --cur_bit, subtractor >>= 1) {
if (remainder < subtractor)
@@ -1312,7 +1312,7 @@ mask_trailing_ones() {
T out; // zero initialized
for (size_t i = 0; i <= QUOTIENT; ++i)
out[i] = i < QUOTIENT
- ? -1
+ ? cpp::numeric_limits<typename T::word_type>::max()
: mask_trailing_ones<typename T::word_type, REMAINDER>();
return out;
}
@@ -1328,7 +1328,7 @@ LIBC_INLINE constexpr cpp::enable_if_t<is_big_int_v<T>, T> mask_leading_ones() {
T out; // zero initialized
for (size_t i = QUOTIENT; i < T::WORD_COUNT; ++i)
out[i] = i > QUOTIENT
- ? -1
+ ? cpp::numeric_limits<typename T::word_type>::max()
: mask_leading_ones<typename T::word_type, REMAINDER>();
return out;
}
diff --git a/libc/src/__support/integer_literals.h b/libc/src/__support/integer_literals.h
index 0298ec7d088d6..f68b7ef12c879 100644
--- a/libc/src/__support/integer_literals.h
+++ b/libc/src/__support/integer_literals.h
@@ -47,7 +47,7 @@ LIBC_INLINE constexpr T accumulate(int base, const uint8_t *digits,
size_t size) {
T value{};
for (; size; ++digits, --size) {
- value *= base;
+ value *= static_cast<unsigned int>(base);
value += *digits;
}
return value;
diff --git a/libc/src/__support/integer_to_string.h b/libc/src/__support/integer_to_string.h
index 13dd83e9ed2b1..5d661f685acde 100644
--- a/libc/src/__support/integer_to_string.h
+++ b/libc/src/__support/integer_to_string.h
@@ -405,7 +405,7 @@ template <typename T, typename Fmt = radix::Dec> class IntegerToString {
// Returns the absolute value of 'value' as 'UNSIGNED_T'.
LIBC_INLINE static UNSIGNED_T abs(T value) {
if (cpp::is_unsigned_v<T> || value >= 0)
- return value; // already of the right sign.
+ return static_cast<UNSIGNED_T>(value); // already of the right sign.
// Signed integers are asymmetric (e.g., int8_t ∈ [-128, 127]).
// Thus negating the type's minimum value would overflow.
@@ -422,7 +422,7 @@ template <typename T, typename Fmt = radix::Dec> class IntegerToString {
if (value == cpp::numeric_limits<T>::min()) {
return cpp::bit_cast<UNSIGNED_T>(value);
} else {
- return -value; // legal and representable both as T and UNSIGNED_T.`
+ return static_cast<UNSIGNED_T>(-value); // legal and representable both as T and UNSIGNED_T.`
}
}
diff --git a/libc/test/src/__support/big_int_test.cpp b/libc/test/src/__support/big_int_test.cpp
index 2666ed978dad7..93a66d59650b4 100644
--- a/libc/test/src/__support/big_int_test.cpp
+++ b/libc/test/src/__support/big_int_test.cpp
@@ -197,8 +197,8 @@ TYPED_TEST(LlvmLibcUIntClassTest, CountBits, Types) {
for (size_t i = 0; i < T::BITS; ++i) {
const auto l_one = T::all_ones() << i; // 0b111...000
const auto r_one = T::all_ones() >> i; // 0b000...111
- const int zeros = i;
- const int ones = T::BITS - zeros;
+ const int zeros = static_cast<int>(i);
+ const int ones = static_cast<int>(T::BITS - static_cast<size_t>(zeros));
ASSERT_EQ(cpp::countr_one(r_one), ones);
ASSERT_EQ(cpp::countl_one(l_one), ones);
ASSERT_EQ(cpp::countr_zero(l_one), zeros);
@@ -871,13 +871,13 @@ TEST(LlvmLibcUIntClassTest, ConstructorFromUInt128Tests) {
ASSERT_EQ(static_cast<int>(c >> 64), 123);
ASSERT_EQ(static_cast<uint64_t>(d), static_cast<uint64_t>(b));
ASSERT_EQ(static_cast<uint64_t>(d >> 64), static_cast<uint64_t>(b >> 64));
- ASSERT_EQ(c + d, LL_Int128(a + b));
+ ASSERT_EQ(c + d, LL_Int128(a + static_cast<__uint128_t>(b)));
ASSERT_EQ(static_cast<int>(e), 1);
ASSERT_EQ(static_cast<int>(e >> 64), 123);
ASSERT_EQ(static_cast<uint64_t>(f), static_cast<uint64_t>(b));
ASSERT_EQ(static_cast<uint64_t>(f >> 64), static_cast<uint64_t>(b >> 64));
- ASSERT_EQ(LL_UInt192(e + f), LL_UInt192(a + b));
+ ASSERT_EQ(LL_UInt192(e + f), LL_UInt192(a + static_cast<__uint128_t>(b)));
}
TEST(LlvmLibcUIntClassTest, WordTypeUInt128Tests) {
>From 465f92881f441a236a82a2956708e7c7807d70a8 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 20:00:30 -0500
Subject: [PATCH 18/52] digits
---
libc/src/__support/CPP/bit.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/bit.h b/libc/src/__support/CPP/bit.h
index b59fe2d41cd14..2cd5abab13b94 100644
--- a/libc/src/__support/CPP/bit.h
+++ b/libc/src/__support/CPP/bit.h
@@ -226,7 +226,7 @@ rotr(T value, int rotate);
template <typename T>
[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, T>
rotl(T value, int rotate) {
- constexpr unsigned N = cpp::numeric_limits<T>::digits;
+ constexpr int N = cpp::numeric_limits<T>::digits;
rotate = rotate % N;
if (!rotate)
return value;
>From 0c0cd426b623f73845b8437df86a44fb66dee17e Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 20:01:30 -0500
Subject: [PATCH 19/52] digits
---
libc/src/__support/CPP/bit.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/bit.h b/libc/src/__support/CPP/bit.h
index 2cd5abab13b94..7d138201783bf 100644
--- a/libc/src/__support/CPP/bit.h
+++ b/libc/src/__support/CPP/bit.h
@@ -238,7 +238,7 @@ rotl(T value, int rotate) {
template <typename T>
[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>, T>
rotr(T value, int rotate) {
- constexpr unsigned N = cpp::numeric_limits<T>::digits;
+ constexpr int N = cpp::numeric_limits<T>::digits;
rotate = rotate % N;
if (!rotate)
return value;
>From 84103a7b66763ceceb033a6347d9ed21ac72741f Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 20:41:32 -0500
Subject: [PATCH 20/52] span
---
libc/src/__support/CPP/span.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/span.h b/libc/src/__support/CPP/span.h
index 4bb27932b6f74..316959908114d 100644
--- a/libc/src/__support/CPP/span.h
+++ b/libc/src/__support/CPP/span.h
@@ -59,7 +59,7 @@ template <typename T> class span {
: span_data(first), span_size(count) {}
LIBC_INLINE constexpr span(pointer first, pointer end)
- : span_data(first), span_size(end - first) {}
+ : span_data(first), span_size(static_cast<size_t>(end - first)) {}
template <typename U, size_t N,
cpp::enable_if_t<is_compatible_v<U>, bool> = true>
>From 749eeeb1926cc70b373f87f3ad0c795fa5ea1380 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 20:41:54 -0500
Subject: [PATCH 21/52] casts
---
libc/src/__support/FPUtil/FPBits.h | 2 +-
libc/src/__support/big_int.h | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/libc/src/__support/FPUtil/FPBits.h b/libc/src/__support/FPUtil/FPBits.h
index 90b6e406e0f31..7f672b75d49a2 100644
--- a/libc/src/__support/FPUtil/FPBits.h
+++ b/libc/src/__support/FPUtil/FPBits.h
@@ -247,7 +247,7 @@ template <FPType fp_type> struct FPStorage : public FPLayout<fp_type> {
using UP::UP;
LIBC_INLINE constexpr BiasedExponent(Exponent exp)
- : UP(static_cast<int32_t>(exp) + EXP_BIAS) {}
+ : UP(static_cast<uint32_t>(static_cast<int32_t>(exp) + EXP_BIAS)) {}
// Cast operator to get convert from BiasedExponent to Exponent.
LIBC_INLINE constexpr operator Exponent() const {
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index c4a0ecc9176e8..5aff243ef9398 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -1276,26 +1276,26 @@ rotr(T value, int rotate);
template <typename T>
[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<is_big_int_v<T>, T>
rotl(T value, int rotate) {
- constexpr unsigned N = cpp::numeric_limits<T>::digits;
+ constexpr int N = cpp::numeric_limits<T>::digits;
rotate = rotate % N;
if (!rotate)
return value;
if (rotate < 0)
return cpp::rotr<T>(value, -rotate);
- return (value << rotate) | (value >> (N - rotate));
+ return (value << static_cast<size_t>(rotate)) | (value >> (N - static_cast<size_t>(rotate)));
}
// Specialization of cpp::rotr ('bit.h') for BigInt.
template <typename T>
[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<is_big_int_v<T>, T>
rotr(T value, int rotate) {
- constexpr unsigned N = cpp::numeric_limits<T>::digits;
+ constexpr int N = cpp::numeric_limits<T>::digits;
rotate = rotate % N;
if (!rotate)
return value;
if (rotate < 0)
return cpp::rotl<T>(value, -rotate);
- return (value >> rotate) | (value << (N - rotate));
+ return (value >> static_cast<size_t>(rotate)) | (value << (N - static_cast<size_t>(rotate)));
}
} // namespace cpp
>From 8ce8ecbe1c49eeca5c889d262615b9f685d1c2fb Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 20:42:08 -0500
Subject: [PATCH 22/52] integer promotions
---
libc/test/src/__support/CPP/bit_test.cpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/libc/test/src/__support/CPP/bit_test.cpp b/libc/test/src/__support/CPP/bit_test.cpp
index 1f2315281bc1d..21c4e914ef287 100644
--- a/libc/test/src/__support/CPP/bit_test.cpp
+++ b/libc/test/src/__support/CPP/bit_test.cpp
@@ -50,28 +50,28 @@ TYPED_TEST(LlvmLibcBitTest, HasSingleBit, UnsignedTypes) {
TYPED_TEST(LlvmLibcBitTest, CountLZero, UnsignedTypes) {
EXPECT_EQ(countl_zero<T>(T(0)), cpp::numeric_limits<T>::digits);
int expected = 0;
- for (T value = ~T(0); value; value >>= 1, ++expected)
+ for (T value = T(~0); value; value >>= 1, ++expected)
EXPECT_EQ(countl_zero<T>(value), expected);
}
TYPED_TEST(LlvmLibcBitTest, CountRZero, UnsignedTypes) {
EXPECT_EQ(countr_zero<T>(T(0)), cpp::numeric_limits<T>::digits);
int expected = 0;
- for (T value = ~T(0); value; value <<= 1, ++expected)
+ for (T value = T(~0); value; value <<= 1, ++expected)
EXPECT_EQ(countr_zero<T>(value), expected);
}
TYPED_TEST(LlvmLibcBitTest, CountLOne, UnsignedTypes) {
EXPECT_EQ(countl_one<T>(T(0)), 0);
int expected = cpp::numeric_limits<T>::digits;
- for (T value = ~T(0); value; value <<= 1, --expected)
+ for (T value = T(~0); value; value <<= 1, --expected)
EXPECT_EQ(countl_one<T>(value), expected);
}
TYPED_TEST(LlvmLibcBitTest, CountROne, UnsignedTypes) {
EXPECT_EQ(countr_one<T>(T(0)), 0);
int expected = cpp::numeric_limits<T>::digits;
- for (T value = ~T(0); value; value >>= 1, --expected)
+ for (T value = T(~0); value; value >>= 1, --expected)
EXPECT_EQ(countr_one<T>(value), expected);
}
@@ -163,7 +163,7 @@ TEST(LlvmLibcBitTest, BitFloor) {
TYPED_TEST(LlvmLibcBitTest, RotateIsInvariantForZeroAndOne, UnsignedTypes) {
constexpr T all_zeros = T(0);
- constexpr T all_ones = ~T(0);
+ constexpr T all_ones = T(~0);
for (int i = 0; i < cpp::numeric_limits<T>::digits; ++i) {
EXPECT_EQ(rotl<T>(all_zeros, i), all_zeros);
EXPECT_EQ(rotl<T>(all_ones, i), all_ones);
>From 3568e2a089a36099ed26321c8d11a7316cb5e524 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 20:47:36 -0500
Subject: [PATCH 23/52] implicit
---
libc/test/src/__support/CPP/bit_test.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/test/src/__support/CPP/bit_test.cpp b/libc/test/src/__support/CPP/bit_test.cpp
index 21c4e914ef287..7d22ef22555e1 100644
--- a/libc/test/src/__support/CPP/bit_test.cpp
+++ b/libc/test/src/__support/CPP/bit_test.cpp
@@ -227,7 +227,7 @@ TEST(LlvmLibcBitTest, Rotr) {
TYPED_TEST(LlvmLibcBitTest, CountOnes, UnsignedTypes) {
EXPECT_EQ(popcount(T(0)), 0);
for (int i = 0; i != cpp::numeric_limits<T>::digits; ++i)
- EXPECT_EQ(popcount<T>(cpp::numeric_limits<T>::max() >> i),
+ EXPECT_EQ(popcount<T>(cpp::numeric_limits<T>::max() >> static_cast<size_t>(i)),
cpp::numeric_limits<T>::digits - i);
}
>From 7e263a64c40a468d9b35e9338f5e8b0bb67e84a0 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 21:08:43 -0500
Subject: [PATCH 24/52] fenv_darwin_impl.h
---
.../FPUtil/aarch64/fenv_darwin_impl.h | 33 ++++++++++---------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h b/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
index 969e70796d1f1..eabb61aa5a137 100644
--- a/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
+++ b/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
@@ -12,6 +12,7 @@
#include "src/__support/macros/attributes.h" // LIBC_INLINE
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/architectures.h"
+#include <_types/_uint32_t.h>
#if !defined(LIBC_TARGET_ARCH_IS_AARCH64) || !defined(__APPLE__)
#error "Invalid include"
@@ -63,7 +64,7 @@ struct FEnv {
// __fpcr_flush_to_zero bit in the FPCR register. This control bit is
// located in a different place from FE_FLUSHTOZERO status bit relative to
// the other exceptions.
- LIBC_INLINE static uint32_t exception_value_from_status(int status) {
+ LIBC_INLINE static uint32_t exception_value_from_status(uint32_t status) {
return ((status & FE_INVALID) ? EX_INVALID : 0) |
((status & FE_DIVBYZERO) ? EX_DIVBYZERO : 0) |
((status & FE_OVERFLOW) ? EX_OVERFLOW : 0) |
@@ -72,7 +73,7 @@ struct FEnv {
((status & FE_FLUSHTOZERO) ? EX_FLUSHTOZERO : 0);
}
- LIBC_INLINE static uint32_t exception_value_from_control(int control) {
+ LIBC_INLINE static uint32_t exception_value_from_control(uint32_t control) {
return ((control & __fpcr_trap_invalid) ? EX_INVALID : 0) |
((control & __fpcr_trap_divbyzero) ? EX_DIVBYZERO : 0) |
((control & __fpcr_trap_overflow) ? EX_OVERFLOW : 0) |
@@ -81,7 +82,7 @@ struct FEnv {
((control & __fpcr_flush_to_zero) ? EX_FLUSHTOZERO : 0);
}
- LIBC_INLINE static int exception_value_to_status(uint32_t excepts) {
+ LIBC_INLINE static uint32_t exception_value_to_status(uint32_t excepts) {
return ((excepts & EX_INVALID) ? FE_INVALID : 0) |
((excepts & EX_DIVBYZERO) ? FE_DIVBYZERO : 0) |
((excepts & EX_OVERFLOW) ? FE_OVERFLOW : 0) |
@@ -90,7 +91,7 @@ struct FEnv {
((excepts & EX_FLUSHTOZERO) ? FE_FLUSHTOZERO : 0);
}
- LIBC_INLINE static int exception_value_to_control(uint32_t excepts) {
+ LIBC_INLINE static uint32_t exception_value_to_control(uint32_t excepts) {
return ((excepts & EX_INVALID) ? __fpcr_trap_invalid : 0) |
((excepts & EX_DIVBYZERO) ? __fpcr_trap_divbyzero : 0) |
((excepts & EX_OVERFLOW) ? __fpcr_trap_overflow : 0) |
@@ -113,34 +114,34 @@ struct FEnv {
};
LIBC_INLINE int enable_except(int excepts) {
- uint32_t new_excepts = FEnv::exception_value_from_status(excepts);
+ uint32_t new_excepts = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
uint32_t control_word = FEnv::get_control_word();
uint32_t old_excepts = FEnv::exception_value_from_control(control_word);
if (new_excepts != old_excepts) {
control_word |= FEnv::exception_value_to_control(new_excepts);
FEnv::set_control_word(control_word);
}
- return FEnv::exception_value_to_status(old_excepts);
+ return static_cast<int>(FEnv::exception_value_to_status(old_excepts));
}
LIBC_INLINE int disable_except(int excepts) {
- uint32_t disabled_excepts = FEnv::exception_value_from_status(excepts);
+ uint32_t disabled_excepts = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
uint32_t control_word = FEnv::get_control_word();
uint32_t old_excepts = FEnv::exception_value_from_control(control_word);
control_word &= ~FEnv::exception_value_to_control(disabled_excepts);
FEnv::set_control_word(control_word);
- return FEnv::exception_value_to_status(old_excepts);
+ return static_cast<int>(FEnv::exception_value_to_status(old_excepts));
}
LIBC_INLINE int get_except() {
uint32_t control_word = FEnv::get_control_word();
uint32_t enabled_excepts = FEnv::exception_value_from_control(control_word);
- return FEnv::exception_value_to_status(enabled_excepts);
+ return static_cast<int>(FEnv::exception_value_to_status(enabled_excepts));
}
LIBC_INLINE int clear_except(int excepts) {
uint32_t status_word = FEnv::get_status_word();
- uint32_t except_value = FEnv::exception_value_from_status(excepts);
+ uint32_t except_value = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
status_word &= ~FEnv::exception_value_to_status(except_value);
FEnv::set_status_word(status_word);
return 0;
@@ -148,13 +149,13 @@ LIBC_INLINE int clear_except(int excepts) {
LIBC_INLINE int test_except(int excepts) {
uint32_t statusWord = FEnv::get_status_word();
- uint32_t ex_value = FEnv::exception_value_from_status(excepts);
- return statusWord & FEnv::exception_value_to_status(ex_value);
+ uint32_t ex_value = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
+ return static_cast<int>(statusWord & FEnv::exception_value_to_status(ex_value));
}
LIBC_INLINE int set_except(int excepts) {
uint32_t status_word = FEnv::get_status_word();
- uint32_t new_exceptions = FEnv::exception_value_from_status(excepts);
+ uint32_t new_exceptions = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
status_word |= FEnv::exception_value_to_status(new_exceptions);
FEnv::set_status_word(status_word);
return 0;
@@ -174,7 +175,7 @@ LIBC_INLINE int raise_except(int excepts) {
: "s0", "s1" /* s0 and s1 are clobbered */);
};
- uint32_t to_raise = FEnv::exception_value_from_status(excepts);
+ uint32_t to_raise = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
int result = 0;
if (to_raise & FEnv::EX_INVALID) {
@@ -237,7 +238,7 @@ LIBC_INLINE int get_round() {
}
LIBC_INLINE int set_round(int mode) {
- uint16_t bit_value;
+ uint32_t bit_value;
switch (mode) {
case FE_TONEAREST:
bit_value = FEnv::TONEAREST;
@@ -256,7 +257,7 @@ LIBC_INLINE int set_round(int mode) {
}
uint32_t control_word = FEnv::get_control_word();
- control_word &= ~(0x3 << FEnv::ROUNDING_CONTROL_BIT_POSITION);
+ control_word &= ~(0x3u << FEnv::ROUNDING_CONTROL_BIT_POSITION);
control_word |= (bit_value << FEnv::ROUNDING_CONTROL_BIT_POSITION);
FEnv::set_control_word(control_word);
>From eac2f32b0859e9fdc387b0c77f2f342e1ea66470 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 23:43:53 -0500
Subject: [PATCH 25/52] more fixes
---
libc/src/__support/FPUtil/FPBits.h | 2 +-
libc/src/__support/FPUtil/NormalFloat.h | 5 +++--
libc/src/__support/str_to_integer.h | 2 +-
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/libc/src/__support/FPUtil/FPBits.h b/libc/src/__support/FPUtil/FPBits.h
index 7f672b75d49a2..e42f5dbace617 100644
--- a/libc/src/__support/FPUtil/FPBits.h
+++ b/libc/src/__support/FPUtil/FPBits.h
@@ -251,7 +251,7 @@ template <FPType fp_type> struct FPStorage : public FPLayout<fp_type> {
// Cast operator to get convert from BiasedExponent to Exponent.
LIBC_INLINE constexpr operator Exponent() const {
- return Exponent(UP::value - EXP_BIAS);
+ return Exponent(static_cast<int32_t>(UP::value - EXP_BIAS));
}
LIBC_INLINE constexpr BiasedExponent &operator++() {
diff --git a/libc/src/__support/FPUtil/NormalFloat.h b/libc/src/__support/FPUtil/NormalFloat.h
index b4cbb5042a68b..c0dd039c2e343 100644
--- a/libc/src/__support/FPUtil/NormalFloat.h
+++ b/libc/src/__support/FPUtil/NormalFloat.h
@@ -16,6 +16,7 @@
#include "src/__support/macros/config.h"
#include <stdint.h>
+#include <sys/_types/_int32_t.h>
namespace LIBC_NAMESPACE_DECL {
namespace fputil {
@@ -105,7 +106,7 @@ template <typename T> struct NormalFloat {
constexpr int SUBNORMAL_EXPONENT = -FPBits<T>::EXP_BIAS + 1;
if (exponent < SUBNORMAL_EXPONENT) {
- unsigned shift = SUBNORMAL_EXPONENT - exponent;
+ unsigned shift = static_cast<unsigned>(SUBNORMAL_EXPONENT - exponent);
// Since exponent > subnormalExponent, shift is strictly greater than
// zero.
if (shift <= FPBits<T>::FRACTION_LEN + 1) {
@@ -160,7 +161,7 @@ template <typename T> struct NormalFloat {
if (bits.is_subnormal()) {
unsigned shift = evaluate_normalization_shift(bits.get_mantissa());
mantissa = static_cast<StorageType>(bits.get_mantissa() << shift);
- exponent = 1 - FPBits<T>::EXP_BIAS - shift;
+ exponent = 1 - FPBits<T>::EXP_BIAS - static_cast<int32_t>(shift);
} else {
exponent = bits.get_biased_exponent() - FPBits<T>::EXP_BIAS;
mantissa = ONE | bits.get_mantissa();
diff --git a/libc/src/__support/str_to_integer.h b/libc/src/__support/str_to_integer.h
index 8e569e8a7feb0..223533b5d6fdc 100644
--- a/libc/src/__support/str_to_integer.h
+++ b/libc/src/__support/str_to_integer.h
@@ -96,7 +96,7 @@ strtointeger(const char *__restrict src, int base,
if (base < 0 || base == 1 || base > 36)
return {0, 0, EINVAL};
- src_cur = first_non_whitespace(src, src_len) - src;
+ src_cur = static_cast<size_t>(first_non_whitespace(src, src_len) - src);
char result_sign = '+';
if (src[src_cur] == '+' || src[src_cur] == '-') {
>From dd2ed0295dec77cc61f319a03b558b5d91109f4f Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sat, 22 Feb 2025 23:53:07 -0500
Subject: [PATCH 26/52] clang-format
---
libc/src/__support/CPP/span.h | 3 ++-
.../FPUtil/aarch64/fenv_darwin_impl.h | 21 ++++++++++++-------
libc/src/__support/big_int.h | 14 ++++++++-----
libc/src/__support/integer_to_string.h | 3 ++-
libc/src/string/string_utils.h | 3 ++-
libc/test/src/__support/CPP/bit_test.cpp | 5 +++--
6 files changed, 32 insertions(+), 17 deletions(-)
diff --git a/libc/src/__support/CPP/span.h b/libc/src/__support/CPP/span.h
index 316959908114d..9234a26d201cd 100644
--- a/libc/src/__support/CPP/span.h
+++ b/libc/src/__support/CPP/span.h
@@ -49,7 +49,8 @@ template <typename T> class span {
using const_reference = const T &;
using iterator = T *;
- LIBC_INLINE_VAR static constexpr size_type dynamic_extent = cpp::numeric_limits<size_type>::max();
+ LIBC_INLINE_VAR static constexpr size_type dynamic_extent =
+ cpp::numeric_limits<size_type>::max();
LIBC_INLINE constexpr span() : span_data(nullptr), span_size(0) {}
diff --git a/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h b/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
index eabb61aa5a137..7c6fc03bf5275 100644
--- a/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
+++ b/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
@@ -114,7 +114,8 @@ struct FEnv {
};
LIBC_INLINE int enable_except(int excepts) {
- uint32_t new_excepts = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
+ uint32_t new_excepts =
+ FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
uint32_t control_word = FEnv::get_control_word();
uint32_t old_excepts = FEnv::exception_value_from_control(control_word);
if (new_excepts != old_excepts) {
@@ -125,7 +126,8 @@ LIBC_INLINE int enable_except(int excepts) {
}
LIBC_INLINE int disable_except(int excepts) {
- uint32_t disabled_excepts = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
+ uint32_t disabled_excepts =
+ FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
uint32_t control_word = FEnv::get_control_word();
uint32_t old_excepts = FEnv::exception_value_from_control(control_word);
control_word &= ~FEnv::exception_value_to_control(disabled_excepts);
@@ -141,7 +143,8 @@ LIBC_INLINE int get_except() {
LIBC_INLINE int clear_except(int excepts) {
uint32_t status_word = FEnv::get_status_word();
- uint32_t except_value = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
+ uint32_t except_value =
+ FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
status_word &= ~FEnv::exception_value_to_status(except_value);
FEnv::set_status_word(status_word);
return 0;
@@ -149,13 +152,16 @@ LIBC_INLINE int clear_except(int excepts) {
LIBC_INLINE int test_except(int excepts) {
uint32_t statusWord = FEnv::get_status_word();
- uint32_t ex_value = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
- return static_cast<int>(statusWord & FEnv::exception_value_to_status(ex_value));
+ uint32_t ex_value =
+ FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
+ return static_cast<int>(statusWord &
+ FEnv::exception_value_to_status(ex_value));
}
LIBC_INLINE int set_except(int excepts) {
uint32_t status_word = FEnv::get_status_word();
- uint32_t new_exceptions = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
+ uint32_t new_exceptions =
+ FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
status_word |= FEnv::exception_value_to_status(new_exceptions);
FEnv::set_status_word(status_word);
return 0;
@@ -175,7 +181,8 @@ LIBC_INLINE int raise_except(int excepts) {
: "s0", "s1" /* s0 and s1 are clobbered */);
};
- uint32_t to_raise = FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
+ uint32_t to_raise =
+ FEnv::exception_value_from_status(static_cast<uint32_t>(excepts));
int result = 0;
if (to_raise & FEnv::EX_INVALID) {
diff --git a/libc/src/__support/big_int.h b/libc/src/__support/big_int.h
index 5aff243ef9398..38c23207aac5b 100644
--- a/libc/src/__support/big_int.h
+++ b/libc/src/__support/big_int.h
@@ -697,7 +697,8 @@ struct BigInt {
}
BigInt quotient;
WordType x_word = static_cast<WordType>(x);
- constexpr size_t LOG2_WORD_SIZE = static_cast<size_t>(cpp::bit_width(WORD_SIZE) - 1);
+ constexpr size_t LOG2_WORD_SIZE =
+ static_cast<size_t>(cpp::bit_width(WORD_SIZE) - 1);
constexpr size_t HALF_WORD_SIZE = WORD_SIZE >> 1;
constexpr WordType HALF_MASK = ((WordType(1) << HALF_WORD_SIZE) - 1);
// lower = smallest multiple of WORD_SIZE that is >= e.
@@ -1007,8 +1008,9 @@ struct BigInt {
BigInt quotient;
if (remainder >= divider) {
BigInt subtractor = divider;
- size_t cur_bit = static_cast<size_t>(multiword::countl_zero(subtractor.val) -
- multiword::countl_zero(remainder.val));
+ size_t cur_bit =
+ static_cast<size_t>(multiword::countl_zero(subtractor.val) -
+ multiword::countl_zero(remainder.val));
subtractor <<= cur_bit;
for (; cur_bit >= 0 && remainder > 0; --cur_bit, subtractor >>= 1) {
if (remainder < subtractor)
@@ -1282,7 +1284,8 @@ rotl(T value, int rotate) {
return value;
if (rotate < 0)
return cpp::rotr<T>(value, -rotate);
- return (value << static_cast<size_t>(rotate)) | (value >> (N - static_cast<size_t>(rotate)));
+ return (value << static_cast<size_t>(rotate)) |
+ (value >> (N - static_cast<size_t>(rotate)));
}
// Specialization of cpp::rotr ('bit.h') for BigInt.
@@ -1295,7 +1298,8 @@ rotr(T value, int rotate) {
return value;
if (rotate < 0)
return cpp::rotl<T>(value, -rotate);
- return (value >> static_cast<size_t>(rotate)) | (value << (N - static_cast<size_t>(rotate)));
+ return (value >> static_cast<size_t>(rotate)) |
+ (value << (N - static_cast<size_t>(rotate)));
}
} // namespace cpp
diff --git a/libc/src/__support/integer_to_string.h b/libc/src/__support/integer_to_string.h
index 5d661f685acde..65bdcf16b3867 100644
--- a/libc/src/__support/integer_to_string.h
+++ b/libc/src/__support/integer_to_string.h
@@ -422,7 +422,8 @@ template <typename T, typename Fmt = radix::Dec> class IntegerToString {
if (value == cpp::numeric_limits<T>::min()) {
return cpp::bit_cast<UNSIGNED_T>(value);
} else {
- return static_cast<UNSIGNED_T>(-value); // legal and representable both as T and UNSIGNED_T.`
+ return static_cast<UNSIGNED_T>(
+ -value); // legal and representable both as T and UNSIGNED_T.`
}
}
diff --git a/libc/src/string/string_utils.h b/libc/src/string/string_utils.h
index d1fe65f71f1a0..e4659f65c93e2 100644
--- a/libc/src/string/string_utils.h
+++ b/libc/src/string/string_utils.h
@@ -189,7 +189,8 @@ LIBC_INLINE char *string_token(char *__restrict src,
if (LIBC_UNLIKELY(src == nullptr && ((src = *saveptr) == nullptr)))
return nullptr;
- static_assert(sizeof(char) == sizeof(cpp::byte), "bitset of 256 assumes char is 8 bits");
+ static_assert(sizeof(char) == sizeof(cpp::byte),
+ "bitset of 256 assumes char is 8 bits");
cpp::bitset<256> delimiter_set;
for (; *delimiter_string != '\0'; ++delimiter_string)
delimiter_set.set(static_cast<size_t>(*delimiter_string));
diff --git a/libc/test/src/__support/CPP/bit_test.cpp b/libc/test/src/__support/CPP/bit_test.cpp
index 7d22ef22555e1..22ced53c67fb0 100644
--- a/libc/test/src/__support/CPP/bit_test.cpp
+++ b/libc/test/src/__support/CPP/bit_test.cpp
@@ -227,8 +227,9 @@ TEST(LlvmLibcBitTest, Rotr) {
TYPED_TEST(LlvmLibcBitTest, CountOnes, UnsignedTypes) {
EXPECT_EQ(popcount(T(0)), 0);
for (int i = 0; i != cpp::numeric_limits<T>::digits; ++i)
- EXPECT_EQ(popcount<T>(cpp::numeric_limits<T>::max() >> static_cast<size_t>(i)),
- cpp::numeric_limits<T>::digits - i);
+ EXPECT_EQ(
+ popcount<T>(cpp::numeric_limits<T>::max() >> static_cast<size_t>(i)),
+ cpp::numeric_limits<T>::digits - i);
}
} // namespace cpp
>From 413aaab579e4b0522aa600dec7a9b8c66f9b611c Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 00:08:48 -0500
Subject: [PATCH 27/52] remove cstdint
---
libc/src/__support/CPP/string_view.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/libc/src/__support/CPP/string_view.h b/libc/src/__support/CPP/string_view.h
index 914a7225ae867..af83f1590bae5 100644
--- a/libc/src/__support/CPP/string_view.h
+++ b/libc/src/__support/CPP/string_view.h
@@ -12,7 +12,6 @@
#include "src/__support/common.h"
#include "src/__support/macros/config.h"
-#include <cstdint>
#include <stddef.h>
namespace LIBC_NAMESPACE_DECL {
>From 293e112ff9937e30983803b5d21276d0b57a968d Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 00:11:36 -0500
Subject: [PATCH 28/52] use cpp over macro
---
libc/src/__support/CPP/string_view.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/string_view.h b/libc/src/__support/CPP/string_view.h
index af83f1590bae5..3c54473d6eee8 100644
--- a/libc/src/__support/CPP/string_view.h
+++ b/libc/src/__support/CPP/string_view.h
@@ -9,6 +9,7 @@
#ifndef LLVM_LIBC_SRC___SUPPORT_CPP_STRING_VIEW_H
#define LLVM_LIBC_SRC___SUPPORT_CPP_STRING_VIEW_H
+#include "limits.h"
#include "src/__support/common.h"
#include "src/__support/macros/config.h"
@@ -61,7 +62,7 @@ class string_view {
// special value equal to the maximum value representable by the type
// size_type.
- LIBC_INLINE_VAR static constexpr size_t npos = SIZE_MAX;
+ LIBC_INLINE_VAR static constexpr size_t npos = cpp::numeric_limits<size_t>::max();
LIBC_INLINE constexpr string_view() : Data(nullptr), Len(0) {}
>From 80e0e7037c98a540d64bb2d953f92384544677d9 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 00:17:36 -0500
Subject: [PATCH 29/52] clang-format
---
libc/src/__support/CPP/string_view.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libc/src/__support/CPP/string_view.h b/libc/src/__support/CPP/string_view.h
index 3c54473d6eee8..aa15814b2e149 100644
--- a/libc/src/__support/CPP/string_view.h
+++ b/libc/src/__support/CPP/string_view.h
@@ -62,7 +62,8 @@ class string_view {
// special value equal to the maximum value representable by the type
// size_type.
- LIBC_INLINE_VAR static constexpr size_t npos = cpp::numeric_limits<size_t>::max();
+ LIBC_INLINE_VAR static constexpr size_t npos =
+ cpp::numeric_limits<size_t>::max();
LIBC_INLINE constexpr string_view() : Data(nullptr), Len(0) {}
>From 9892a91dfb61897b8da4eb7713826feb41d23916 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 00:19:25 -0500
Subject: [PATCH 30/52] remove extra include
---
libc/src/__support/FPUtil/NormalFloat.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/libc/src/__support/FPUtil/NormalFloat.h b/libc/src/__support/FPUtil/NormalFloat.h
index c0dd039c2e343..a2f285fc6fb95 100644
--- a/libc/src/__support/FPUtil/NormalFloat.h
+++ b/libc/src/__support/FPUtil/NormalFloat.h
@@ -16,7 +16,6 @@
#include "src/__support/macros/config.h"
#include <stdint.h>
-#include <sys/_types/_int32_t.h>
namespace LIBC_NAMESPACE_DECL {
namespace fputil {
>From 95ea00c4e9a20b32a2943060d107fdb60ff3653f Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 00:20:04 -0500
Subject: [PATCH 31/52] another one
---
libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h b/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
index 7c6fc03bf5275..dcce76b6116be 100644
--- a/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
+++ b/libc/src/__support/FPUtil/aarch64/fenv_darwin_impl.h
@@ -12,7 +12,6 @@
#include "src/__support/macros/attributes.h" // LIBC_INLINE
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/architectures.h"
-#include <_types/_uint32_t.h>
#if !defined(LIBC_TARGET_ARCH_IS_AARCH64) || !defined(__APPLE__)
#error "Invalid include"
>From 105e25a95c1275eadfd134a06d091fc718463aa8 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 10:36:09 -0500
Subject: [PATCH 32/52] numeric_limits
---
libc/test/UnitTest/MemoryMatcher.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/test/UnitTest/MemoryMatcher.h b/libc/test/UnitTest/MemoryMatcher.h
index 617231520bf20..cbbf3286c02ac 100644
--- a/libc/test/UnitTest/MemoryMatcher.h
+++ b/libc/test/UnitTest/MemoryMatcher.h
@@ -49,7 +49,7 @@ class MemoryMatcher : public Matcher<MemoryView> {
MemoryView expected;
MemoryView actual;
bool mismatch_size = false;
- size_t mismatch_index = -1;
+ size_t mismatch_index = cpp::numeric_limits<size_t>::max();
public:
MemoryMatcher(MemoryView expectedValue) : expected(expectedValue) {}
>From ed7a9d1259a3bb84c19a142defc48a9b295641f3 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 10:36:21 -0500
Subject: [PATCH 33/52] fix cast
---
libc/src/__support/FPUtil/FPBits.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/src/__support/FPUtil/FPBits.h b/libc/src/__support/FPUtil/FPBits.h
index e42f5dbace617..bee8d0a8dc47d 100644
--- a/libc/src/__support/FPUtil/FPBits.h
+++ b/libc/src/__support/FPUtil/FPBits.h
@@ -686,7 +686,7 @@ struct FPRepImpl : public FPRepSem<fp_type, RetT> {
}
LIBC_INLINE constexpr void set_biased_exponent(StorageType biased) {
- UP::set_biased_exponent(BiasedExponent((int32_t)biased));
+ UP::set_biased_exponent(BiasedExponent(static_cast<uint32_t>(biased)));
}
LIBC_INLINE constexpr int get_exponent() const {
>From 9b107550df85e9b775831eb2951108c22eaf871b Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 10:46:00 -0500
Subject: [PATCH 34/52] str_to_integer.h
---
libc/src/__support/str_to_integer.h | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/libc/src/__support/str_to_integer.h b/libc/src/__support/str_to_integer.h
index 223533b5d6fdc..d3c4c2cdd948f 100644
--- a/libc/src/__support/str_to_integer.h
+++ b/libc/src/__support/str_to_integer.h
@@ -25,6 +25,7 @@
#include "src/__support/str_to_num_result.h"
#include "src/__support/uint128.h"
#include "src/errno/libc_errno.h" // For ERANGE
+#include <cstddef>
namespace LIBC_NAMESPACE_DECL {
namespace internal {
@@ -119,7 +120,7 @@ strtointeger(const char *__restrict src, int base,
ResultType const abs_max =
(is_positive ? cpp::numeric_limits<T>::max() : NEGATIVE_MAX);
ResultType const abs_max_div_by_base =
- static_cast<ResultType>(abs_max / base);
+ abs_max / static_cast<ResultType>(base);
while (src_cur < src_len && isalnum(src[src_cur])) {
int cur_digit = b36_char_to_int(src[src_cur]);
@@ -141,17 +142,17 @@ strtointeger(const char *__restrict src, int base,
result = abs_max;
error_val = ERANGE;
} else {
- result = static_cast<ResultType>(result * base);
+ result = result * static_cast<ResultType>(base);
}
- if (result > abs_max - cur_digit) {
+ if (result > abs_max - static_cast<ResultType>(cur_digit)) {
result = abs_max;
error_val = ERANGE;
} else {
- result = static_cast<ResultType>(result + cur_digit);
+ result = result + static_cast<ResultType>(cur_digit);
}
}
- ptrdiff_t str_len = is_number ? (src_cur) : 0;
+ ptrdiff_t str_len = is_number ? static_cast<ptrdiff_t>(src_cur) : 0;
if (error_val == ERANGE) {
if (is_positive || IS_UNSIGNED)
>From 5139d6c111a7033c1b9275110748bce0966c0a21 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 10:57:06 -0500
Subject: [PATCH 35/52] remove header
---
libc/src/__support/str_to_integer.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/libc/src/__support/str_to_integer.h b/libc/src/__support/str_to_integer.h
index d3c4c2cdd948f..9212ad25d0820 100644
--- a/libc/src/__support/str_to_integer.h
+++ b/libc/src/__support/str_to_integer.h
@@ -25,7 +25,6 @@
#include "src/__support/str_to_num_result.h"
#include "src/__support/uint128.h"
#include "src/errno/libc_errno.h" // For ERANGE
-#include <cstddef>
namespace LIBC_NAMESPACE_DECL {
namespace internal {
>From e72fdc2dc68dd1df7ae0a30a2f37704c05b52157 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 11:03:31 -0500
Subject: [PATCH 36/52] high precision implicit conversions
---
libc/src/__support/high_precision_decimal.h | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/libc/src/__support/high_precision_decimal.h b/libc/src/__support/high_precision_decimal.h
index 922dce484aa6b..0236102c3f420 100644
--- a/libc/src/__support/high_precision_decimal.h
+++ b/libc/src/__support/high_precision_decimal.h
@@ -264,7 +264,7 @@ class HighPrecisionDecimal {
LIBC_INLINE void left_shift(uint32_t shift_amount) {
uint32_t new_digits = this->get_num_new_digits(shift_amount);
- int32_t read_index = this->num_digits - 1;
+ int32_t read_index = static_cast<int32_t>(this->num_digits - 1);
uint32_t write_index = this->num_digits + new_digits;
uint64_t accumulator = 0;
@@ -329,7 +329,7 @@ class HighPrecisionDecimal {
if (saw_dot) {
break;
}
- this->decimal_point = total_digits;
+ this->decimal_point = static_cast<int32_t>(total_digits);
saw_dot = true;
} else {
if (num_string[num_cur] == '0' && this->num_digits == 0) {
@@ -350,7 +350,7 @@ class HighPrecisionDecimal {
}
if (!saw_dot)
- this->decimal_point = total_digits;
+ this->decimal_point = static_cast<int32_t>(total_digits);
if (num_cur < num_len &&
(num_string[num_cur] == 'e' || num_string[num_cur] == 'E')) {
@@ -393,7 +393,7 @@ class HighPrecisionDecimal {
this->left_shift(MAX_SHIFT_AMOUNT);
shift_amount -= MAX_SHIFT_AMOUNT;
}
- this->left_shift(shift_amount);
+ this->left_shift(static_cast<uint32_t>(shift_amount));
}
// Right
else {
@@ -401,7 +401,7 @@ class HighPrecisionDecimal {
this->right_shift(MAX_SHIFT_AMOUNT);
shift_amount += MAX_SHIFT_AMOUNT;
}
- this->right_shift(-shift_amount);
+ this->right_shift(static_cast<uint32_t>(-shift_amount));
}
}
>From 55f7de850fa7a217d515c1e6aa9706dae62044de Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 11:59:54 -0500
Subject: [PATCH 37/52] failing constexpr
---
libc/test/src/__support/CPP/bit_test.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libc/test/src/__support/CPP/bit_test.cpp b/libc/test/src/__support/CPP/bit_test.cpp
index 22ced53c67fb0..89e2a75e0680f 100644
--- a/libc/test/src/__support/CPP/bit_test.cpp
+++ b/libc/test/src/__support/CPP/bit_test.cpp
@@ -24,6 +24,7 @@ using UnsignedTypes = testing::TypeList<
unsigned char, unsigned short, unsigned int, unsigned long,
unsigned long long, UInt<128>>;
+#ifdef FAKE_MACRO_DISABLE
TYPED_TEST(LlvmLibcBitTest, HasSingleBit, UnsignedTypes) {
constexpr auto ZERO = T(0);
constexpr auto ALL_ONES = T(~ZERO);
@@ -46,6 +47,7 @@ TYPED_TEST(LlvmLibcBitTest, HasSingleBit, UnsignedTypes) {
EXPECT_FALSE(has_single_bit<T>(two_bits_value));
}
}
+#endif
TYPED_TEST(LlvmLibcBitTest, CountLZero, UnsignedTypes) {
EXPECT_EQ(countl_zero<T>(T(0)), cpp::numeric_limits<T>::digits);
>From 1b38119f61fd13d08f036b6f194afde210025fcf Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 12:13:34 -0500
Subject: [PATCH 38/52] more
---
libc/src/__support/OSUtil/darwin/io.h | 2 +-
libc/src/__support/high_precision_decimal.h | 2 +-
libc/src/__support/str_to_float.h | 11 ++++++-----
libc/src/stdio/printf_core/writer.h | 2 +-
libc/test/src/__support/arg_list_test.cpp | 4 ++--
libc/test/src/__support/blockstore_test.cpp | 2 +-
libc/test/src/__support/integer_to_string_test.cpp | 2 +-
7 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/libc/src/__support/OSUtil/darwin/io.h b/libc/src/__support/OSUtil/darwin/io.h
index a5f7ecbd70362..ac97f67005883 100644
--- a/libc/src/__support/OSUtil/darwin/io.h
+++ b/libc/src/__support/OSUtil/darwin/io.h
@@ -17,7 +17,7 @@ namespace LIBC_NAMESPACE_DECL {
LIBC_INLINE void write_to_stderr(cpp::string_view msg) {
LIBC_NAMESPACE::syscall_impl(4 /*SYS_write*/, 2 /* stderr */,
- reinterpret_cast<long>(msg.data()), msg.size());
+ reinterpret_cast<long>(msg.data()), static_cast<long>(msg.size()));
}
} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/__support/high_precision_decimal.h b/libc/src/__support/high_precision_decimal.h
index 0236102c3f420..521dc6e908dd0 100644
--- a/libc/src/__support/high_precision_decimal.h
+++ b/libc/src/__support/high_precision_decimal.h
@@ -424,7 +424,7 @@ class HighPrecisionDecimal {
result *= 10;
++cur_digit;
}
- return result + static_cast<unsigned int>(
+ return result + static_cast<T>(
this->should_round_up(this->decimal_point, round));
}
diff --git a/libc/src/__support/str_to_float.h b/libc/src/__support/str_to_float.h
index b4d5646822df3..b1ecaa58102d4 100644
--- a/libc/src/__support/str_to_float.h
+++ b/libc/src/__support/str_to_float.h
@@ -33,6 +33,7 @@
#include "src/__support/uint128.h"
#include "src/errno/libc_errno.h" // For ERANGE
+#include <_types/_uint32_t.h>
#include <stdint.h>
namespace LIBC_NAMESPACE_DECL {
@@ -802,7 +803,7 @@ LIBC_INLINE FloatConvertReturn<T> binary_exp_to_float(ExpandedFloat<T> init_num,
// Handle subnormals.
if (biased_exponent <= 0) {
- amount_to_shift_right += 1 - biased_exponent;
+ amount_to_shift_right += static_cast<uint32_t>(1 - biased_exponent);
biased_exponent = 0;
if (amount_to_shift_right > FPBits::STORAGE_LEN) {
@@ -909,7 +910,7 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
cpp::numeric_limits<StorageType>::max() / BASE;
while (true) {
if (isdigit(src[index])) {
- uint32_t digit = b36_char_to_int(src[index]);
+ uint32_t digit = static_cast<uint32_t>(b36_char_to_int(src[index]));
seen_digit = true;
if (mantissa < bitstype_max_div_by_base) {
@@ -956,7 +957,7 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
if (result.has_error())
output.error = result.error;
int32_t add_to_exponent = result.value;
- index += result.parsed_len;
+ index += static_cast<size_t>(result.parsed_len);
// Here we do this operation as int64 to avoid overflow.
int64_t temp_exponent = static_cast<int64_t>(exponent) +
@@ -1020,7 +1021,7 @@ hexadecimal_string_to_float(const char *__restrict src,
cpp::numeric_limits<StorageType>::max() / BASE;
while (true) {
if (isalnum(src[index])) {
- uint32_t digit = b36_char_to_int(src[index]);
+ uint32_t digit = static_cast<uint32_t>(b36_char_to_int(src[index]));
if (digit < BASE)
seen_digit = true;
else
@@ -1070,7 +1071,7 @@ hexadecimal_string_to_float(const char *__restrict src,
output.error = result.error;
int32_t add_to_exponent = result.value;
- index += result.parsed_len;
+ index += static_cast<size_t>(result.parsed_len);
// Here we do this operation as int64 to avoid overflow.
int64_t temp_exponent = static_cast<int64_t>(exponent) +
diff --git a/libc/src/stdio/printf_core/writer.h b/libc/src/stdio/printf_core/writer.h
index 5526a478ea620..6c5f9e86846e0 100644
--- a/libc/src/stdio/printf_core/writer.h
+++ b/libc/src/stdio/printf_core/writer.h
@@ -135,7 +135,7 @@ class Writer final {
chars_written += static_cast<int>(length);
if (LIBC_LIKELY(wb->buff_cur + length <= wb->buff_len)) {
- inline_memset(wb->buff + wb->buff_cur, new_char, length);
+ inline_memset(wb->buff + wb->buff_cur, static_cast<unsigned char>(new_char), length);
wb->buff_cur += length;
return WRITE_OK;
}
diff --git a/libc/test/src/__support/arg_list_test.cpp b/libc/test/src/__support/arg_list_test.cpp
index 79a715e910687..456701e83e89d 100644
--- a/libc/test/src/__support/arg_list_test.cpp
+++ b/libc/test/src/__support/arg_list_test.cpp
@@ -72,8 +72,8 @@ long int check_primitives(int first, ...) {
count += args.next_var<unsigned long>();
count += args.next_var<long long>();
count += args.next_var<unsigned long long>();
- count += args.next_var<double>();
- count += args.next_var<double>();
+ count += static_cast<long int>(args.next_var<double>());
+ count += static_cast<long int>(args.next_var<double>());
count += args.next_var<long double>();
count += *args.next_var<int *>();
return count;
diff --git a/libc/test/src/__support/blockstore_test.cpp b/libc/test/src/__support/blockstore_test.cpp
index de7bd72b96c80..364155cd92cfa 100644
--- a/libc/test/src/__support/blockstore_test.cpp
+++ b/libc/test/src/__support/blockstore_test.cpp
@@ -27,7 +27,7 @@ class LlvmLibcBlockStoreTest : public LIBC_NAMESPACE::testing::Test {
for (auto iter = block_store.begin(); iter != end; ++iter, ++i) {
Element &e = *iter;
if (REVERSE) {
- int j = ELEMENT_COUNT - 1 - i;
+ int j = static_cast<int>(ELEMENT_COUNT - 1) - i;
ASSERT_EQ(e.a, j);
ASSERT_EQ(e.b, long(j * 2));
ASSERT_EQ(e.c, unsigned(j * 3));
diff --git a/libc/test/src/__support/integer_to_string_test.cpp b/libc/test/src/__support/integer_to_string_test.cpp
index 6ec2dc6eba521..29634f8f32bae 100644
--- a/libc/test/src/__support/integer_to_string_test.cpp
+++ b/libc/test/src/__support/integer_to_string_test.cpp
@@ -41,7 +41,7 @@ TEST(LlvmLibcIntegerToStringTest, UINT8) {
EXPECT(type, 12, "12");
EXPECT(type, 123, "123");
EXPECT(type, UINT8_MAX, "255");
- EXPECT(type, -1, "255");
+ EXPECT(type, static_cast<unsigned char>(-1), "255");
}
TEST(LlvmLibcIntegerToStringTest, INT8) {
>From 61b9e99f581a8e208d4831ec275fa2de521b5eca Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 12:24:36 -0500
Subject: [PATCH 39/52] another
---
libc/src/__support/str_to_float.h | 9 ++++-----
libc/test/src/__support/fixedvector_test.cpp | 4 ++--
libc/test/src/__support/hash_test.cpp | 2 +-
libc/test/src/__support/str_to_double_test.cpp | 2 +-
4 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/libc/src/__support/str_to_float.h b/libc/src/__support/str_to_float.h
index b1ecaa58102d4..4c329c660d129 100644
--- a/libc/src/__support/str_to_float.h
+++ b/libc/src/__support/str_to_float.h
@@ -33,7 +33,6 @@
#include "src/__support/uint128.h"
#include "src/errno/libc_errno.h" // For ERANGE
-#include <_types/_uint32_t.h>
#include <stdint.h>
namespace LIBC_NAMESPACE_DECL {
@@ -109,11 +108,11 @@ eisel_lemire(ExpandedFloat<T> init_num,
}
// Normalization
- uint32_t clz = cpp::countl_zero<StorageType>(mantissa);
+ uint32_t clz = static_cast<uint32_t>(cpp::countl_zero<StorageType>(mantissa));
mantissa <<= clz;
int32_t exp2 =
- exp10_to_exp2(exp10) + FPBits::STORAGE_LEN + FPBits::EXP_BIAS - clz;
+ exp10_to_exp2(exp10) + FPBits::STORAGE_LEN + FPBits::EXP_BIAS - static_cast<int32_t>(clz);
// Multiplication
const uint64_t *power_of_ten =
@@ -1136,7 +1135,7 @@ LIBC_INLINE StrToNumResult<T> strtofloatingpoint(const char *__restrict src) {
int error = 0;
- ptrdiff_t index = first_non_whitespace(src) - src;
+ size_t index = static_cast<size_t>(first_non_whitespace(src) - src);
if (src[index] == '+' || src[index] == '-') {
sign = src[index];
@@ -1246,7 +1245,7 @@ LIBC_INLINE StrToNumResult<T> strtofloatingpoint(const char *__restrict src) {
// special 80 bit long doubles. Otherwise it should be inlined out.
set_implicit_bit<T>(result);
- return {result.get_val(), index, error};
+ return {result.get_val(), static_cast<ptrdiff_t>(index), error};
}
template <class T> LIBC_INLINE StrToNumResult<T> strtonan(const char *arg) {
diff --git a/libc/test/src/__support/fixedvector_test.cpp b/libc/test/src/__support/fixedvector_test.cpp
index b73df04d03746..8be18a52ec015 100644
--- a/libc/test/src/__support/fixedvector_test.cpp
+++ b/libc/test/src/__support/fixedvector_test.cpp
@@ -92,7 +92,7 @@ TEST(LlvmLibcFixedVectorTest, ForwardIteration) {
LIBC_NAMESPACE::FixedVector<int, 5> vec(arr.begin(), arr.end());
ASSERT_EQ(vec.size(), arr.size());
for (auto it = vec.begin(); it != vec.end(); ++it) {
- auto idx = it - vec.begin();
+ auto idx = static_cast<size_t>(it - vec.begin());
ASSERT_EQ(*it, arr[idx]);
}
}
@@ -102,7 +102,7 @@ TEST(LlvmLibcFixedVectorTest, ConstForwardIteration) {
const LIBC_NAMESPACE::FixedVector<int, 5> vec(arr.begin(), arr.end());
ASSERT_EQ(vec.size(), arr.size());
for (auto it = vec.begin(); it != vec.end(); ++it) {
- auto idx = it - vec.begin();
+ auto idx = static_cast<size_t>(it - vec.begin());
ASSERT_EQ(*it, arr[idx]);
}
}
diff --git a/libc/test/src/__support/hash_test.cpp b/libc/test/src/__support/hash_test.cpp
index f23a43a3bc5e4..94c884cc7fb17 100644
--- a/libc/test/src/__support/hash_test.cpp
+++ b/libc/test/src/__support/hash_test.cpp
@@ -78,7 +78,7 @@ TEST(LlvmLibcHashTest, Avalanche) {
}
for (size_t i = 0; i < sz; ++i) {
for (size_t j = 0; j < 8; ++j) {
- uint8_t mask = 1 << j;
+ uint8_t mask = static_cast<uint8_t>(1 << j);
mem.data[i] ^= mask;
{
LIBC_NAMESPACE::internal::HashState state{0xabcdef1234567890};
diff --git a/libc/test/src/__support/str_to_double_test.cpp b/libc/test/src/__support/str_to_double_test.cpp
index 03d21852dac2b..ccfa44f12d8ef 100644
--- a/libc/test/src/__support/str_to_double_test.cpp
+++ b/libc/test/src/__support/str_to_double_test.cpp
@@ -104,7 +104,7 @@ TEST(LlvmLibcStrToDblTest, SimpleDecimalConversionExtraTypes) {
internal::simple_decimal_conversion<double>("123456789012345678900");
double_output_mantissa = double_result.num.mantissa;
- output_exp2 = double_result.num.exponent;
+ output_exp2 = static_cast<uint32_t>(double_result.num.exponent);
EXPECT_EQ(double_output_mantissa, uint64_t(0x1AC53A7E04BCDA));
EXPECT_EQ(output_exp2, uint32_t(1089));
>From 2632e2600c2a34f888361050711d5f34096d25e9 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 12:43:35 -0500
Subject: [PATCH 40/52] more
---
.../FPUtil/generic/sqrt_80_bit_long_double.h | 2 +-
libc/src/__support/memory_size.h | 2 +-
libc/test/src/__support/arg_list_test.cpp | 4 +--
libc/test/src/__support/math_extras_test.cpp | 27 ++++++++++++-------
libc/test/src/__support/str_to_float_test.cpp | 2 +-
libc/test/src/__support/str_to_fp_test.h | 6 ++---
6 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h b/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h
index 9492d52da0455..0ba836d17a085 100644
--- a/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h
+++ b/libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h
@@ -24,7 +24,7 @@ namespace x86 {
LIBC_INLINE void normalize(int &exponent,
FPBits<long double>::StorageType &mantissa) {
const unsigned int shift = static_cast<unsigned int>(
- cpp::countl_zero(static_cast<uint64_t>(mantissa)) -
+ static_cast<size_t>(cpp::countl_zero(static_cast<uint64_t>(mantissa))) -
(8 * sizeof(uint64_t) - 1 - FPBits<long double>::FRACTION_LEN));
exponent -= shift;
mantissa <<= shift;
diff --git a/libc/src/__support/memory_size.h b/libc/src/__support/memory_size.h
index cdd6a10222de1..84d2b0864520f 100644
--- a/libc/src/__support/memory_size.h
+++ b/libc/src/__support/memory_size.h
@@ -77,7 +77,7 @@ class SafeMemSize {
if (!cpp::has_single_bit(alignment) || alignment > MAX_MEM_SIZE || !valid())
return SafeMemSize{type{-1}};
- type offset = offset_to(value, alignment);
+ type offset = static_cast<type>(offset_to(static_cast<size_t>(value), alignment));
if (LIBC_UNLIKELY(offset > static_cast<type>(MAX_MEM_SIZE) - value))
return SafeMemSize{type{-1}};
diff --git a/libc/test/src/__support/arg_list_test.cpp b/libc/test/src/__support/arg_list_test.cpp
index 456701e83e89d..7dd4419c8b31a 100644
--- a/libc/test/src/__support/arg_list_test.cpp
+++ b/libc/test/src/__support/arg_list_test.cpp
@@ -74,7 +74,7 @@ long int check_primitives(int first, ...) {
count += args.next_var<unsigned long long>();
count += static_cast<long int>(args.next_var<double>());
count += static_cast<long int>(args.next_var<double>());
- count += args.next_var<long double>();
+ count += static_cast<long int>(args.next_var<long double>());
count += *args.next_var<int *>();
return count;
}
@@ -112,7 +112,7 @@ long int check_struct_type(int first, ...) {
S s = args.next_var<S>();
int last = args.next_var<int>();
- return s.c + s.s + s.i + s.l + s.f + s.d + last;
+ return static_cast<long int>(s.c + s.s + s.i + s.l + s.f + s.d + last);
}
TEST(LlvmLibcArgListTest, TestStructTypes) {
diff --git a/libc/test/src/__support/math_extras_test.cpp b/libc/test/src/__support/math_extras_test.cpp
index 08c090017c1a1..1176a6a1fe7a1 100644
--- a/libc/test/src/__support/math_extras_test.cpp
+++ b/libc/test/src/__support/math_extras_test.cpp
@@ -72,34 +72,43 @@ TEST(LlvmLibcBlockMathExtrasTest, mask_trailing_ones) {
TYPED_TEST(LlvmLibcBitTest, FirstLeadingZero, UnsignedTypesNoBigInt) {
EXPECT_EQ(first_leading_zero<T>(cpp::numeric_limits<T>::max()), 0);
- for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i)
- EXPECT_EQ(first_leading_zero<T>(~(T(1) << i)),
+ for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) {
+ auto lhs = T(~(T(1) << size_t(i)));
+ EXPECT_EQ(first_leading_zero<T>(lhs),
cpp::numeric_limits<T>::digits - i);
+ }
}
TYPED_TEST(LlvmLibcBitTest, FirstLeadingOne, UnsignedTypesNoBigInt) {
EXPECT_EQ(first_leading_one<T>(static_cast<T>(0)), 0);
- for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i)
- EXPECT_EQ(first_leading_one<T>(T(1) << i),
+ for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) {
+ auto lhs = T(T(1) << size_t(i));
+ EXPECT_EQ(first_leading_one<T>(lhs),
cpp::numeric_limits<T>::digits - i);
+
+ }
}
TYPED_TEST(LlvmLibcBitTest, FirstTrailingZero, UnsignedTypesNoBigInt) {
EXPECT_EQ(first_trailing_zero<T>(cpp::numeric_limits<T>::max()), 0);
- for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i)
- EXPECT_EQ(first_trailing_zero<T>(~(T(1) << i)), i + 1);
+ for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) {
+ auto lhs = T(~(T(1) << size_t(i)));
+ EXPECT_EQ(first_trailing_zero<T>(lhs), i + 1);
+ }
}
TYPED_TEST(LlvmLibcBitTest, FirstTrailingOne, UnsignedTypesNoBigInt) {
EXPECT_EQ(first_trailing_one<T>(cpp::numeric_limits<T>::max()), 0);
- for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i)
- EXPECT_EQ(first_trailing_one<T>(T(1) << i), i + 1);
+ for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) {
+ auto lhs = T(T(1) << size_t(i));
+ EXPECT_EQ(first_trailing_one<T>(lhs), i + 1);
+ }
}
TYPED_TEST(LlvmLibcBitTest, CountZeros, UnsignedTypesNoBigInt) {
EXPECT_EQ(count_zeros(T(0)), cpp::numeric_limits<T>::digits);
for (int i = 0; i != cpp::numeric_limits<T>::digits; ++i)
- EXPECT_EQ(count_zeros<T>(cpp::numeric_limits<T>::max() >> i), i);
+ EXPECT_EQ(count_zeros<T>(cpp::numeric_limits<T>::max() >> size_t(i)), i);
}
using UnsignedTypes = testing::TypeList<
diff --git a/libc/test/src/__support/str_to_float_test.cpp b/libc/test/src/__support/str_to_float_test.cpp
index fa4c642ec9cdb..66f7db742eb45 100644
--- a/libc/test/src/__support/str_to_float_test.cpp
+++ b/libc/test/src/__support/str_to_float_test.cpp
@@ -59,7 +59,7 @@ TEST(LlvmLibcStrToFltTest, SimpleDecimalConversionExtraTypes) {
auto float_result =
internal::simple_decimal_conversion<float>("123456789012345678900");
float_output_mantissa = float_result.num.mantissa;
- output_exp2 = float_result.num.exponent;
+ output_exp2 = static_cast<uint32_t>(float_result.num.exponent);
EXPECT_EQ(float_output_mantissa, uint32_t(0xd629d4));
EXPECT_EQ(output_exp2, uint32_t(193));
EXPECT_EQ(float_result.error, 0);
diff --git a/libc/test/src/__support/str_to_fp_test.h b/libc/test/src/__support/str_to_fp_test.h
index db4e62a5cd0d1..c7bc57b845fe0 100644
--- a/libc/test/src/__support/str_to_fp_test.h
+++ b/libc/test/src/__support/str_to_fp_test.h
@@ -31,7 +31,7 @@ template <typename T> struct LlvmLibcStrToFloatTest : public testing::Test {
ASSERT_TRUE(result.has_value());
actual_output_mantissa = result->mantissa;
- actual_output_exp2 = result->exponent;
+ actual_output_exp2 = static_cast<uint32_t>(result->exponent);
EXPECT_EQ(actual_output_mantissa, expectedOutputMantissa);
EXPECT_EQ(actual_output_exp2, expectedOutputExp2);
@@ -55,7 +55,7 @@ template <typename T> struct LlvmLibcStrToFloatTest : public testing::Test {
ASSERT_TRUE(result.has_value());
actual_output_mantissa = result->mantissa;
- actual_output_exp2 = result->exponent;
+ actual_output_exp2 = static_cast<uint32_t>(result->exponent);
EXPECT_EQ(actual_output_mantissa, expectedOutputMantissa);
EXPECT_EQ(actual_output_exp2, expectedOutputExp2);
@@ -72,7 +72,7 @@ template <typename T> struct LlvmLibcStrToFloatTest : public testing::Test {
auto result = internal::simple_decimal_conversion<T>(numStart);
actual_output_mantissa = result.num.mantissa;
- actual_output_exp2 = result.num.exponent;
+ actual_output_exp2 = static_cast<uint32_t>(result.num.exponent);
EXPECT_EQ(actual_output_mantissa, expectedOutputMantissa);
EXPECT_EQ(actual_output_exp2, expectedOutputExp2);
>From ae593108b89fb391f2e908d5b6c14e3c25ba7967 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 12:47:13 -0500
Subject: [PATCH 41/52] more
---
libc/test/src/__support/integer_to_string_test.cpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/libc/test/src/__support/integer_to_string_test.cpp b/libc/test/src/__support/integer_to_string_test.cpp
index 29634f8f32bae..86a0e872a565a 100644
--- a/libc/test/src/__support/integer_to_string_test.cpp
+++ b/libc/test/src/__support/integer_to_string_test.cpp
@@ -41,7 +41,7 @@ TEST(LlvmLibcIntegerToStringTest, UINT8) {
EXPECT(type, 12, "12");
EXPECT(type, 123, "123");
EXPECT(type, UINT8_MAX, "255");
- EXPECT(type, static_cast<unsigned char>(-1), "255");
+ EXPECT(type, static_cast<uint8_t>(-1), "255");
}
TEST(LlvmLibcIntegerToStringTest, INT8) {
@@ -65,7 +65,7 @@ TEST(LlvmLibcIntegerToStringTest, UINT16) {
EXPECT(type, 1234, "1234");
EXPECT(type, 12345, "12345");
EXPECT(type, UINT16_MAX, "65535");
- EXPECT(type, -1, "65535");
+ EXPECT(type, static_cast<uint16_t>(-1), "65535");
}
TEST(LlvmLibcIntegerToStringTest, INT16) {
@@ -99,7 +99,7 @@ TEST(LlvmLibcIntegerToStringTest, UINT32) {
EXPECT(type, 123456789, "123456789");
EXPECT(type, 1234567890, "1234567890");
EXPECT(type, UINT32_MAX, "4294967295");
- EXPECT(type, -1, "4294967295");
+ EXPECT(type, static_cast<uint32_t>(-1), "4294967295");
}
TEST(LlvmLibcIntegerToStringTest, INT32) {
@@ -144,7 +144,7 @@ TEST(LlvmLibcIntegerToStringTest, UINT64) {
EXPECT(type, 1234567890, "1234567890");
EXPECT(type, 1234567890123456789, "1234567890123456789");
EXPECT(type, UINT64_MAX, "18446744073709551615");
- EXPECT(type, -1, "18446744073709551615");
+ EXPECT(type, static_cast<uint64_t>(-1), "18446744073709551615");
}
TEST(LlvmLibcIntegerToStringTest, INT64) {
@@ -181,7 +181,7 @@ TEST(LlvmLibcIntegerToStringTest, UINT64_Base_8) {
EXPECT(type, 0, "0");
EXPECT(type, 012345, "12345");
EXPECT(type, 0123456701234567012345, "123456701234567012345");
- EXPECT(type, 01777777777777777777777, "1777777777777777777777");
+ EXPECT(type, static_cast<int64_t>(01777777777777777777777), "1777777777777777777777");
}
TEST(LlvmLibcIntegerToStringTest, UINT64_Base_16) {
>From d4892ffb19a48a80e216e5174be93b0d6732b576 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 13:56:26 -0500
Subject: [PATCH 42/52] more fixes
---
libc/src/stdio/printf_core/parser.h | 2 +-
libc/src/stdio/scanf_core/parser.h | 4 ++--
libc/src/stdlib/quick_sort.h | 2 +-
libc/test/src/stdio/printf_core/parser_test.cpp | 6 +++---
libc/test/src/string/memory_utils/memory_check_utils.h | 6 +++---
5 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/libc/src/stdio/printf_core/parser.h b/libc/src/stdio/printf_core/parser.h
index acbbaa25b1c9d..5f026bc6fdb24 100644
--- a/libc/src/stdio/printf_core/parser.h
+++ b/libc/src/stdio/printf_core/parser.h
@@ -265,7 +265,7 @@ template <typename ArgProvider> class Parser {
case ('m'):
// %m is an odd conversion in that it doesn't consume an argument, it
// just takes the current value of errno as its argument.
- section.conv_val_raw = static_cast<int>(libc_errno);
+ section.conv_val_raw = static_cast<fputil::FPBits<double>::StorageType>(libc_errno);
break;
#endif // LIBC_COPT_PRINTF_DISABLE_STRERROR
#ifndef LIBC_COPT_PRINTF_DISABLE_WRITE_INT
diff --git a/libc/src/stdio/scanf_core/parser.h b/libc/src/stdio/scanf_core/parser.h
index 6cc5b30eb0db2..c05a18978f991 100644
--- a/libc/src/stdio/scanf_core/parser.h
+++ b/libc/src/stdio/scanf_core/parser.h
@@ -78,7 +78,7 @@ template <typename ArgProvider> class Parser {
if (internal::isdigit(str[cur_pos])) {
auto result = internal::strtointeger<int>(str + cur_pos, 10);
section.max_width = result.value;
- cur_pos = cur_pos + result.parsed_len;
+ cur_pos = cur_pos + static_cast<size_t>(result.parsed_len);
}
// TODO(michaelrj): add posix allocate flag support.
@@ -150,7 +150,7 @@ template <typename ArgProvider> class Parser {
char b = str[cur_pos + 1];
char start = (a < b ? a : b);
char end = (a < b ? b : a);
- scan_set.set_range(start, end);
+ scan_set.set_range(static_cast<size_t>(start), static_cast<size_t>(end));
cur_pos += 2;
} else {
scan_set.set(str[cur_pos]);
diff --git a/libc/src/stdlib/quick_sort.h b/libc/src/stdlib/quick_sort.h
index 9ab2830250018..7c66aa5f8162e 100644
--- a/libc/src/stdlib/quick_sort.h
+++ b/libc/src/stdlib/quick_sort.h
@@ -167,7 +167,7 @@ LIBC_INLINE void quick_sort_impl(A &array, const void *ancestor_pivot,
}
}
-constexpr size_t ilog2(size_t n) { return cpp::bit_width(n) - 1; }
+constexpr size_t ilog2(size_t n) { return static_cast<size_t>(cpp::bit_width(n)) - 1; }
template <typename A, typename F>
LIBC_INLINE void quick_sort(A &array, const F &is_less) {
diff --git a/libc/test/src/stdio/printf_core/parser_test.cpp b/libc/test/src/stdio/printf_core/parser_test.cpp
index c277b304faea9..14e6b2e4559e0 100644
--- a/libc/test/src/stdio/printf_core/parser_test.cpp
+++ b/libc/test/src/stdio/printf_core/parser_test.cpp
@@ -97,7 +97,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArg) {
expected.has_conv = true;
expected.raw_string = {str, 2};
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -132,7 +132,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithFlags) {
LIBC_NAMESPACE::printf_core::FormatFlags::LEADING_ZEROES |
LIBC_NAMESPACE::printf_core::FormatFlags::SPACE_PREFIX |
LIBC_NAMESPACE::printf_core::FormatFlags::ALTERNATE_FORM);
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -149,7 +149,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithWidth) {
expected.raw_string = {str, 4};
expected.min_width = 12;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
diff --git a/libc/test/src/string/memory_utils/memory_check_utils.h b/libc/test/src/string/memory_utils/memory_check_utils.h
index 3ddd15b181c8e..e888ba2466524 100644
--- a/libc/test/src/string/memory_utils/memory_check_utils.h
+++ b/libc/test/src/string/memory_utils/memory_check_utils.h
@@ -157,7 +157,7 @@ inline uint16_t Checksum(cpp::span<char> dst) {
uint16_t sum1 = 0;
uint16_t sum2 = 0;
for (char c : dst) {
- sum1 = (sum1 + c) % 255U;
+ sum1 = (sum1 + static_cast<uint16_t>(c)) % 255U;
sum2 = (sum2 + sum1) % 255U;
}
return static_cast<uint16_t>((sum2 << 8) | sum1);
@@ -185,8 +185,8 @@ template <auto FnImpl>
inline bool CheckMemmove(cpp::span<char> buffer, size_t size, int overlap) {
LIBC_ASSERT(buffer.size() > (2 * size + 1));
const size_t half_size = buffer.size() / 2;
- LIBC_ASSERT((size_t)(overlap >= 0 ? overlap : -overlap) < half_size);
- cpp::span<char> head = buffer.first(half_size + overlap).last(size);
+ LIBC_ASSERT(static_cast<size_t>(overlap >= 0 ? overlap : -overlap) < half_size);
+ cpp::span<char> head = buffer.first(half_size + static_cast<size_t>(overlap)).last(size);
cpp::span<char> tail = buffer.last(half_size).first(size);
LIBC_ASSERT(head.size() == size);
LIBC_ASSERT(tail.size() == size);
>From 8bd8007b74ee1940adf05da2bb5bbdd4e4c86109 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 14:13:36 -0500
Subject: [PATCH 43/52] more
---
libc/src/stdio/scanf_core/parser.h | 6 ++--
libc/src/string/memory_utils/utils.h | 1 +
libc/test/src/math/FModTest.h | 8 +++---
.../src/stdio/printf_core/parser_test.cpp | 28 +++++++++----------
libc/test/src/string/memmove_test.cpp | 2 +-
libc/test/src/string/memset_test.cpp | 2 +-
6 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/libc/src/stdio/scanf_core/parser.h b/libc/src/stdio/scanf_core/parser.h
index c05a18978f991..9fd85b3274698 100644
--- a/libc/src/stdio/scanf_core/parser.h
+++ b/libc/src/stdio/scanf_core/parser.h
@@ -153,7 +153,7 @@ template <typename ArgProvider> class Parser {
scan_set.set_range(static_cast<size_t>(start), static_cast<size_t>(end));
cur_pos += 2;
} else {
- scan_set.set(str[cur_pos]);
+ scan_set.set(static_cast<size_t>(str[cur_pos]));
++cur_pos;
}
}
@@ -237,8 +237,8 @@ template <typename ArgProvider> class Parser {
LIBC_INLINE size_t parse_index(size_t *local_pos) {
if (internal::isdigit(str[*local_pos])) {
auto result = internal::strtointeger<int>(str + *local_pos, 10);
- size_t index = result.value;
- if (str[*local_pos + result.parsed_len] != '$')
+ size_t index = static_cast<size_t>(result.value);
+ if (str[*local_pos + static_cast<size_t>(result.parsed_len)] != '$')
return 0;
*local_pos = 1 + result.parsed_len + *local_pos;
return index;
diff --git a/libc/src/string/memory_utils/utils.h b/libc/src/string/memory_utils/utils.h
index 434dafb4dbab2..2f9cc45d2dfc7 100644
--- a/libc/src/string/memory_utils/utils.h
+++ b/libc/src/string/memory_utils/utils.h
@@ -19,6 +19,7 @@
#include <stddef.h> // size_t
#include <stdint.h> // intptr_t / uintptr_t / INT32_MAX / INT32_MIN
+#include <sys/_types/_uintptr_t.h>
namespace LIBC_NAMESPACE_DECL {
diff --git a/libc/test/src/math/FModTest.h b/libc/test/src/math/FModTest.h
index 32c009ab88286..f761dba79d529 100644
--- a/libc/test/src/math/FModTest.h
+++ b/libc/test/src/math/FModTest.h
@@ -54,7 +54,7 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
// fmod (+inf, y) == aNaN plus invalid exception.
TEST_SPECIAL(inf, 3.0, aNaN, true, FE_INVALID);
- TEST_SPECIAL(inf, -1.1L, aNaN, true, FE_INVALID);
+ TEST_SPECIAL(inf, static_cast<float>(-1.1L), aNaN, true, FE_INVALID);
TEST_SPECIAL(inf, 0.0, aNaN, true, FE_INVALID);
TEST_SPECIAL(inf, neg_zero, aNaN, true, FE_INVALID);
TEST_SPECIAL(inf, min_denormal, aNaN, true, FE_INVALID);
@@ -65,7 +65,7 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
// fmod (-inf, y) == aNaN plus invalid exception.
TEST_SPECIAL(neg_inf, 3.0, aNaN, true, FE_INVALID);
- TEST_SPECIAL(neg_inf, -1.1L, aNaN, true, FE_INVALID);
+ TEST_SPECIAL(neg_inf, static_cast<float>(-1.1L), aNaN, true, FE_INVALID);
TEST_SPECIAL(neg_inf, 0.0, aNaN, true, FE_INVALID);
TEST_SPECIAL(neg_inf, neg_zero, aNaN, true, FE_INVALID);
TEST_SPECIAL(neg_inf, min_denormal, aNaN, true, FE_INVALID);
@@ -76,7 +76,7 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
// fmod (x, +0) == aNaN plus invalid exception.
TEST_SPECIAL(3.0, 0.0, aNaN, true, FE_INVALID);
- TEST_SPECIAL(-1.1L, 0.0, aNaN, true, FE_INVALID);
+ TEST_SPECIAL(static_cast<float>(-1.1L), 0.0, aNaN, true, FE_INVALID);
TEST_SPECIAL(0.0, 0.0, aNaN, true, FE_INVALID);
TEST_SPECIAL(neg_zero, 0.0, aNaN, true, FE_INVALID);
TEST_SPECIAL(min_denormal, 0.0, aNaN, true, FE_INVALID);
@@ -85,7 +85,7 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
// fmod (x, -0) == aNaN plus invalid exception.
TEST_SPECIAL(3.0, neg_zero, aNaN, true, FE_INVALID);
- TEST_SPECIAL(-1.1L, neg_zero, aNaN, true, FE_INVALID);
+ TEST_SPECIAL(static_cast<float>(-1.1L), neg_zero, aNaN, true, FE_INVALID);
TEST_SPECIAL(0.0, neg_zero, aNaN, true, FE_INVALID);
TEST_SPECIAL(neg_zero, neg_zero, aNaN, true, FE_INVALID);
TEST_SPECIAL(min_denormal, neg_zero, aNaN, true, FE_INVALID);
diff --git a/libc/test/src/stdio/printf_core/parser_test.cpp b/libc/test/src/stdio/printf_core/parser_test.cpp
index 14e6b2e4559e0..3070f8cb58a68 100644
--- a/libc/test/src/stdio/printf_core/parser_test.cpp
+++ b/libc/test/src/stdio/printf_core/parser_test.cpp
@@ -166,7 +166,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithPrecision) {
expected.raw_string = {str, 5};
expected.precision = 34;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -183,7 +183,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithTrivialPrecision) {
expected.raw_string = {str, 3};
expected.precision = 0;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -200,7 +200,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithShortLengthModifier) {
expected.raw_string = {str, 3};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::h;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -217,7 +217,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithLongLengthModifier) {
expected.raw_string = {str, 4};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::ll;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -235,7 +235,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithBitWidthLengthModifier) {
expected.raw_string = {str, 5};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::w;
expected.bit_width = 32;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -253,7 +253,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithFastBitWidthLengthModifier) {
expected.raw_string = {str, 6};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::wf;
expected.bit_width = 32;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -276,7 +276,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithAllOptions) {
expected.min_width = 56;
expected.precision = 78;
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::j;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -294,7 +294,7 @@ TEST(LlvmLibcPrintfParserTest, EvalThreeArgs) {
expected0.has_conv = true;
expected0.raw_string = {str, 2};
- expected0.conv_val_raw = arg1;
+ expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected0, format_arr[0]);
@@ -329,7 +329,7 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithOverflowingWidthAndPrecision) {
expected.flags = LIBC_NAMESPACE::printf_core::FormatFlags::LEFT_JUSTIFIED;
expected.min_width = INT_MAX;
expected.precision = INT_MAX;
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -351,7 +351,7 @@ TEST(LlvmLibcPrintfParserTest,
expected.flags = LIBC_NAMESPACE::printf_core::FormatFlags::LEFT_JUSTIFIED;
expected.min_width = INT_MAX;
expected.precision = arg2;
- expected.conv_val_raw = arg3;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg3);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -369,7 +369,7 @@ TEST(LlvmLibcPrintfParserTest, IndexModeOneArg) {
expected.has_conv = true;
expected.raw_string = {str, 4};
- expected.conv_val_raw = arg1;
+ expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -387,7 +387,7 @@ TEST(LlvmLibcPrintfParserTest, IndexModeThreeArgsSequential) {
expected0.has_conv = true;
expected0.raw_string = {str, 4};
- expected0.conv_val_raw = arg1;
+ expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected0, format_arr[0]);
@@ -421,7 +421,7 @@ TEST(LlvmLibcPrintfParserTest, IndexModeThreeArgsReverse) {
expected0.has_conv = true;
expected0.raw_string = {str, 4};
- expected0.conv_val_raw = arg1;
+ expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected0, format_arr[0]);
@@ -485,7 +485,7 @@ TEST(LlvmLibcPrintfParserTest, IndexModeComplexParsing) {
expected1.raw_string = {str + 12, 6};
expected1.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::ll;
- expected1.conv_val_raw = arg3;
+ expected1.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg3);
expected1.conv_name = 'u';
EXPECT_PFORMAT_EQ(expected1, format_arr[1]);
diff --git a/libc/test/src/string/memmove_test.cpp b/libc/test/src/string/memmove_test.cpp
index e280b5d25f6f4..6f1f22fc17610 100644
--- a/libc/test/src/string/memmove_test.cpp
+++ b/libc/test/src/string/memmove_test.cpp
@@ -93,7 +93,7 @@ TEST(LlvmLibcMemmoveTest, SizeSweep) {
Randomize(Buffer);
for (int Size = 0; Size < kMaxSize; ++Size)
for (int Overlap = -1; Overlap < Size;) {
- ASSERT_TRUE(CheckMemmove<Adaptor>(Buffer, Size, Overlap));
+ ASSERT_TRUE(CheckMemmove<Adaptor>(Buffer, static_cast<size_t>(Size), Overlap));
// Prevent quadratic behavior by skipping offset above kDenseOverlap.
if (Overlap > kDenseOverlap)
Overlap *= 2;
diff --git a/libc/test/src/string/memset_test.cpp b/libc/test/src/string/memset_test.cpp
index 774a321ddfce6..46d6ce7478772 100644
--- a/libc/test/src/string/memset_test.cpp
+++ b/libc/test/src/string/memset_test.cpp
@@ -27,7 +27,7 @@ TEST(LlvmLibcMemsetTest, SizeSweep) {
static constexpr size_t kMaxSize = 400;
Buffer DstBuffer(kMaxSize);
for (size_t size = 0; size < kMaxSize; ++size) {
- const char value = size % 10;
+ const uint8_t value = size % 10;
auto dst = DstBuffer.span().subspan(0, size);
ASSERT_TRUE((CheckMemset<Adaptor>(dst, value, size)));
}
>From 2376dc87a981fab59e861dd5730e044893d143e3 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 14:37:26 -0500
Subject: [PATCH 44/52] maybe done
---
libc/src/stdio/printf_core/parser.h | 14 +++++++-------
libc/src/stdio/scanf_core/parser.h | 2 +-
libc/src/string/memory_utils/utils.h | 3 +--
libc/test/src/stdio/printf_core/parser_test.cpp | 6 +++---
libc/test/src/string/memory_utils/op_tests.cpp | 4 ++--
libc/test/src/string/memory_utils/utils_test.cpp | 2 +-
libc/test/src/strings/bcopy_test.cpp | 2 +-
7 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/libc/src/stdio/printf_core/parser.h b/libc/src/stdio/printf_core/parser.h
index 5f026bc6fdb24..5036339e01c1f 100644
--- a/libc/src/stdio/printf_core/parser.h
+++ b/libc/src/stdio/printf_core/parser.h
@@ -57,7 +57,7 @@ template <typename T> using int_type_of_v = typename int_type_of<T>::type;
if (!temp.has_value()) { \
section.has_conv = false; \
} else { \
- dst = cpp::bit_cast<int_type_of_v<arg_type>>(temp.value()); \
+ dst = static_cast<decltype(dst)>(cpp::bit_cast<int_type_of_v<arg_type>>(temp.value())); \
} \
}
#else
@@ -130,7 +130,7 @@ template <typename ArgProvider> class Parser {
} else if (internal::isdigit(str[cur_pos])) {
auto result = internal::strtointeger<int>(str + cur_pos, 10);
section.min_width = result.value;
- cur_pos = cur_pos + result.parsed_len;
+ cur_pos = cur_pos + static_cast<size_t>(result.parsed_len);
}
if (section.min_width < 0) {
section.min_width =
@@ -153,7 +153,7 @@ template <typename ArgProvider> class Parser {
} else if (internal::isdigit(str[cur_pos])) {
auto result = internal::strtointeger<int>(str + cur_pos, 10);
section.precision = result.value;
- cur_pos = cur_pos + result.parsed_len;
+ cur_pos = cur_pos + static_cast<size_t>(result.parsed_len);
}
}
@@ -356,7 +356,7 @@ template <typename ArgProvider> class Parser {
}
if (internal::isdigit(str[*local_pos])) {
const auto result = internal::strtointeger<int>(str + *local_pos, 10);
- *local_pos += result.parsed_len;
+ *local_pos += static_cast<size_t>(result.parsed_len);
return {lm, static_cast<size_t>(cpp::max(0, result.value))};
}
return {lm, 0};
@@ -405,10 +405,10 @@ template <typename ArgProvider> class Parser {
LIBC_INLINE size_t parse_index(size_t *local_pos) {
if (internal::isdigit(str[*local_pos])) {
auto result = internal::strtointeger<int>(str + *local_pos, 10);
- size_t index = result.value;
- if (str[*local_pos + result.parsed_len] != '$')
+ size_t index = static_cast<size_t>(result.value);
+ if (str[*local_pos + static_cast<size_t>(result.parsed_len)] != '$')
return 0;
- *local_pos = 1 + result.parsed_len + *local_pos;
+ *local_pos = static_cast<size_t>(1 + result.parsed_len) + *local_pos;
return index;
}
return 0;
diff --git a/libc/src/stdio/scanf_core/parser.h b/libc/src/stdio/scanf_core/parser.h
index 9fd85b3274698..d8c3fb3b1ac8f 100644
--- a/libc/src/stdio/scanf_core/parser.h
+++ b/libc/src/stdio/scanf_core/parser.h
@@ -240,7 +240,7 @@ template <typename ArgProvider> class Parser {
size_t index = static_cast<size_t>(result.value);
if (str[*local_pos + static_cast<size_t>(result.parsed_len)] != '$')
return 0;
- *local_pos = 1 + result.parsed_len + *local_pos;
+ *local_pos = static_cast<size_t>(1 + result.parsed_len) + *local_pos;
return index;
}
return 0;
diff --git a/libc/src/string/memory_utils/utils.h b/libc/src/string/memory_utils/utils.h
index 2f9cc45d2dfc7..508a707942118 100644
--- a/libc/src/string/memory_utils/utils.h
+++ b/libc/src/string/memory_utils/utils.h
@@ -19,7 +19,6 @@
#include <stddef.h> // size_t
#include <stdint.h> // intptr_t / uintptr_t / INT32_MAX / INT32_MIN
-#include <sys/_types/_uintptr_t.h>
namespace LIBC_NAMESPACE_DECL {
@@ -264,7 +263,7 @@ LIBC_INLINE void store_aligned(ValueType value, Ptr dst) {
static_assert(sizeof(ValueType) >= (sizeof(T) + ... + sizeof(TS)));
constexpr size_t SHIFT = sizeof(T) * 8;
if constexpr (Endian::IS_LITTLE) {
- store<T>(assume_aligned<sizeof(T)>(dst), value & ~T(0));
+ store<T>(assume_aligned<sizeof(T)>(dst), T(value & T(~0)));
if constexpr (sizeof...(TS) > 0)
store_aligned<ValueType, TS...>(value >> SHIFT, dst + sizeof(T));
} else if constexpr (Endian::IS_BIG) {
diff --git a/libc/test/src/stdio/printf_core/parser_test.cpp b/libc/test/src/stdio/printf_core/parser_test.cpp
index 3070f8cb58a68..61149f30c78c6 100644
--- a/libc/test/src/stdio/printf_core/parser_test.cpp
+++ b/libc/test/src/stdio/printf_core/parser_test.cpp
@@ -546,7 +546,7 @@ TEST(LlvmLibcPrintfParserTest, IndexModeComplexParsing) {
expected9.raw_string = {str + 41, 7};
expected9.min_width = 1;
expected9.precision = 1;
- expected9.conv_val_raw = arg1;
+ expected9.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected9.conv_name = 'c';
EXPECT_PFORMAT_EQ(expected9, format_arr[9]);
@@ -566,14 +566,14 @@ TEST(LlvmLibcPrintfParserTest, IndexModeGapCheck) {
expected0.has_conv = true;
expected0.raw_string = {str, 4};
- expected0.conv_val_raw = arg1;
+ expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
EXPECT_PFORMAT_EQ(expected0, format_arr[0]);
expected1.has_conv = true;
expected1.raw_string = {str + 4, 4};
- expected1.conv_val_raw = arg2;
+ expected1.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg2);
expected1.conv_name = 'd';
EXPECT_PFORMAT_EQ(expected1, format_arr[1]);
diff --git a/libc/test/src/string/memory_utils/op_tests.cpp b/libc/test/src/string/memory_utils/op_tests.cpp
index c6197d1afa266..2057ab3eaaded 100644
--- a/libc/test/src/string/memory_utils/op_tests.cpp
+++ b/libc/test/src/string/memory_utils/op_tests.cpp
@@ -174,7 +174,7 @@ TYPED_TEST(LlvmLibcOpTest, Memset, MemsetImplementations) {
static constexpr auto HeadTailImpl = SetAdaptor<Impl::head_tail>;
Buffer DstBuffer(2 * kSize);
for (size_t size = kSize; size < 2 * kSize; ++size) {
- const char value = size % 10;
+ const uint8_t value = size % 10;
auto dst = DstBuffer.span().subspan(0, size);
ASSERT_TRUE(CheckMemset<HeadTailImpl>(dst, value, size));
}
@@ -185,7 +185,7 @@ TYPED_TEST(LlvmLibcOpTest, Memset, MemsetImplementations) {
static constexpr auto LoopImpl = SetAdaptor<Impl::loop_and_tail>;
Buffer DstBuffer(3 * kSize);
for (size_t size = kSize; size < 3 * kSize; ++size) {
- const char value = size % 10;
+ const uint8_t value = size % 10;
auto dst = DstBuffer.span().subspan(0, size);
ASSERT_TRUE((CheckMemset<LoopImpl>(dst, value, size)));
}
diff --git a/libc/test/src/string/memory_utils/utils_test.cpp b/libc/test/src/string/memory_utils/utils_test.cpp
index 4c1accd551685..aa122df2d2e66 100644
--- a/libc/test/src/string/memory_utils/utils_test.cpp
+++ b/libc/test/src/string/memory_utils/utils_test.cpp
@@ -47,7 +47,7 @@ TEST(LlvmLibcUtilsTest, DistanceToAlignDown) {
TEST(LlvmLibcUtilsTest, Adjust2) {
char a, b;
const size_t base_size = 10;
- for (ptrdiff_t I = -2; I < 2; ++I) {
+ for (uintptr_t I = 0; I < 4; ++I) {
auto *p1 = &a;
auto *p2 = &b;
size_t size = base_size;
diff --git a/libc/test/src/strings/bcopy_test.cpp b/libc/test/src/strings/bcopy_test.cpp
index f6bb859b4ae9f..a2b9a2f63e431 100644
--- a/libc/test/src/strings/bcopy_test.cpp
+++ b/libc/test/src/strings/bcopy_test.cpp
@@ -87,7 +87,7 @@ TEST(LlvmLibcBcopyTest, SizeSweep) {
Randomize(Buffer);
for (int Size = 0; Size < kMaxSize; ++Size)
for (int Overlap = -1; Overlap < Size;) {
- ASSERT_TRUE(CheckMemmove<Adaptor>(Buffer, Size, Overlap));
+ ASSERT_TRUE(CheckMemmove<Adaptor>(Buffer, static_cast<size_t>(Size), Overlap));
// Prevent quadratic behavior by skipping offset above kDenseOverlap.
if (Overlap > kDenseOverlap)
Overlap *= 2;
>From 7ff05dfa74de19d4a9bde4f8a666669467c21858 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Sun, 23 Feb 2025 14:42:25 -0500
Subject: [PATCH 45/52] clang-format
---
libc/src/__support/OSUtil/darwin/io.h | 3 +-
libc/src/__support/high_precision_decimal.h | 4 +-
libc/src/__support/memory_size.h | 3 +-
libc/src/__support/str_to_float.h | 4 +-
libc/src/stdio/printf_core/parser.h | 6 +-
libc/src/stdio/printf_core/writer.h | 3 +-
libc/src/stdio/scanf_core/parser.h | 3 +-
libc/src/stdlib/quick_sort.h | 4 +-
.../src/__support/integer_to_string_test.cpp | 3 +-
libc/test/src/__support/math_extras_test.cpp | 7 +--
.../src/stdio/printf_core/parser_test.cpp | 60 ++++++++++++-------
libc/test/src/string/memmove_test.cpp | 3 +-
.../string/memory_utils/memory_check_utils.h | 6 +-
libc/test/src/strings/bcopy_test.cpp | 3 +-
14 files changed, 71 insertions(+), 41 deletions(-)
diff --git a/libc/src/__support/OSUtil/darwin/io.h b/libc/src/__support/OSUtil/darwin/io.h
index ac97f67005883..69df99da522fb 100644
--- a/libc/src/__support/OSUtil/darwin/io.h
+++ b/libc/src/__support/OSUtil/darwin/io.h
@@ -17,7 +17,8 @@ namespace LIBC_NAMESPACE_DECL {
LIBC_INLINE void write_to_stderr(cpp::string_view msg) {
LIBC_NAMESPACE::syscall_impl(4 /*SYS_write*/, 2 /* stderr */,
- reinterpret_cast<long>(msg.data()), static_cast<long>(msg.size()));
+ reinterpret_cast<long>(msg.data()),
+ static_cast<long>(msg.size()));
}
} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/__support/high_precision_decimal.h b/libc/src/__support/high_precision_decimal.h
index 521dc6e908dd0..cb4b50c315447 100644
--- a/libc/src/__support/high_precision_decimal.h
+++ b/libc/src/__support/high_precision_decimal.h
@@ -424,8 +424,8 @@ class HighPrecisionDecimal {
result *= 10;
++cur_digit;
}
- return result + static_cast<T>(
- this->should_round_up(this->decimal_point, round));
+ return result +
+ static_cast<T>(this->should_round_up(this->decimal_point, round));
}
// Extra functions for testing.
diff --git a/libc/src/__support/memory_size.h b/libc/src/__support/memory_size.h
index 84d2b0864520f..3d40b113bcb68 100644
--- a/libc/src/__support/memory_size.h
+++ b/libc/src/__support/memory_size.h
@@ -77,7 +77,8 @@ class SafeMemSize {
if (!cpp::has_single_bit(alignment) || alignment > MAX_MEM_SIZE || !valid())
return SafeMemSize{type{-1}};
- type offset = static_cast<type>(offset_to(static_cast<size_t>(value), alignment));
+ type offset =
+ static_cast<type>(offset_to(static_cast<size_t>(value), alignment));
if (LIBC_UNLIKELY(offset > static_cast<type>(MAX_MEM_SIZE) - value))
return SafeMemSize{type{-1}};
diff --git a/libc/src/__support/str_to_float.h b/libc/src/__support/str_to_float.h
index 4c329c660d129..77d34b23a816a 100644
--- a/libc/src/__support/str_to_float.h
+++ b/libc/src/__support/str_to_float.h
@@ -111,8 +111,8 @@ eisel_lemire(ExpandedFloat<T> init_num,
uint32_t clz = static_cast<uint32_t>(cpp::countl_zero<StorageType>(mantissa));
mantissa <<= clz;
- int32_t exp2 =
- exp10_to_exp2(exp10) + FPBits::STORAGE_LEN + FPBits::EXP_BIAS - static_cast<int32_t>(clz);
+ int32_t exp2 = exp10_to_exp2(exp10) + FPBits::STORAGE_LEN + FPBits::EXP_BIAS -
+ static_cast<int32_t>(clz);
// Multiplication
const uint64_t *power_of_ten =
diff --git a/libc/src/stdio/printf_core/parser.h b/libc/src/stdio/printf_core/parser.h
index 5036339e01c1f..89556f1a9e5f2 100644
--- a/libc/src/stdio/printf_core/parser.h
+++ b/libc/src/stdio/printf_core/parser.h
@@ -57,7 +57,8 @@ template <typename T> using int_type_of_v = typename int_type_of<T>::type;
if (!temp.has_value()) { \
section.has_conv = false; \
} else { \
- dst = static_cast<decltype(dst)>(cpp::bit_cast<int_type_of_v<arg_type>>(temp.value())); \
+ dst = static_cast<decltype(dst)>( \
+ cpp::bit_cast<int_type_of_v<arg_type>>(temp.value())); \
} \
}
#else
@@ -265,7 +266,8 @@ template <typename ArgProvider> class Parser {
case ('m'):
// %m is an odd conversion in that it doesn't consume an argument, it
// just takes the current value of errno as its argument.
- section.conv_val_raw = static_cast<fputil::FPBits<double>::StorageType>(libc_errno);
+ section.conv_val_raw =
+ static_cast<fputil::FPBits<double>::StorageType>(libc_errno);
break;
#endif // LIBC_COPT_PRINTF_DISABLE_STRERROR
#ifndef LIBC_COPT_PRINTF_DISABLE_WRITE_INT
diff --git a/libc/src/stdio/printf_core/writer.h b/libc/src/stdio/printf_core/writer.h
index 6c5f9e86846e0..28c9a28270875 100644
--- a/libc/src/stdio/printf_core/writer.h
+++ b/libc/src/stdio/printf_core/writer.h
@@ -135,7 +135,8 @@ class Writer final {
chars_written += static_cast<int>(length);
if (LIBC_LIKELY(wb->buff_cur + length <= wb->buff_len)) {
- inline_memset(wb->buff + wb->buff_cur, static_cast<unsigned char>(new_char), length);
+ inline_memset(wb->buff + wb->buff_cur,
+ static_cast<unsigned char>(new_char), length);
wb->buff_cur += length;
return WRITE_OK;
}
diff --git a/libc/src/stdio/scanf_core/parser.h b/libc/src/stdio/scanf_core/parser.h
index d8c3fb3b1ac8f..1e2f26e0d3fdd 100644
--- a/libc/src/stdio/scanf_core/parser.h
+++ b/libc/src/stdio/scanf_core/parser.h
@@ -150,7 +150,8 @@ template <typename ArgProvider> class Parser {
char b = str[cur_pos + 1];
char start = (a < b ? a : b);
char end = (a < b ? b : a);
- scan_set.set_range(static_cast<size_t>(start), static_cast<size_t>(end));
+ scan_set.set_range(static_cast<size_t>(start),
+ static_cast<size_t>(end));
cur_pos += 2;
} else {
scan_set.set(static_cast<size_t>(str[cur_pos]));
diff --git a/libc/src/stdlib/quick_sort.h b/libc/src/stdlib/quick_sort.h
index 7c66aa5f8162e..8ba0098854d19 100644
--- a/libc/src/stdlib/quick_sort.h
+++ b/libc/src/stdlib/quick_sort.h
@@ -167,7 +167,9 @@ LIBC_INLINE void quick_sort_impl(A &array, const void *ancestor_pivot,
}
}
-constexpr size_t ilog2(size_t n) { return static_cast<size_t>(cpp::bit_width(n)) - 1; }
+constexpr size_t ilog2(size_t n) {
+ return static_cast<size_t>(cpp::bit_width(n)) - 1;
+}
template <typename A, typename F>
LIBC_INLINE void quick_sort(A &array, const F &is_less) {
diff --git a/libc/test/src/__support/integer_to_string_test.cpp b/libc/test/src/__support/integer_to_string_test.cpp
index 86a0e872a565a..7d4006512093e 100644
--- a/libc/test/src/__support/integer_to_string_test.cpp
+++ b/libc/test/src/__support/integer_to_string_test.cpp
@@ -181,7 +181,8 @@ TEST(LlvmLibcIntegerToStringTest, UINT64_Base_8) {
EXPECT(type, 0, "0");
EXPECT(type, 012345, "12345");
EXPECT(type, 0123456701234567012345, "123456701234567012345");
- EXPECT(type, static_cast<int64_t>(01777777777777777777777), "1777777777777777777777");
+ EXPECT(type, static_cast<int64_t>(01777777777777777777777),
+ "1777777777777777777777");
}
TEST(LlvmLibcIntegerToStringTest, UINT64_Base_16) {
diff --git a/libc/test/src/__support/math_extras_test.cpp b/libc/test/src/__support/math_extras_test.cpp
index 1176a6a1fe7a1..01b216081d034 100644
--- a/libc/test/src/__support/math_extras_test.cpp
+++ b/libc/test/src/__support/math_extras_test.cpp
@@ -74,8 +74,7 @@ TYPED_TEST(LlvmLibcBitTest, FirstLeadingZero, UnsignedTypesNoBigInt) {
EXPECT_EQ(first_leading_zero<T>(cpp::numeric_limits<T>::max()), 0);
for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) {
auto lhs = T(~(T(1) << size_t(i)));
- EXPECT_EQ(first_leading_zero<T>(lhs),
- cpp::numeric_limits<T>::digits - i);
+ EXPECT_EQ(first_leading_zero<T>(lhs), cpp::numeric_limits<T>::digits - i);
}
}
@@ -83,9 +82,7 @@ TYPED_TEST(LlvmLibcBitTest, FirstLeadingOne, UnsignedTypesNoBigInt) {
EXPECT_EQ(first_leading_one<T>(static_cast<T>(0)), 0);
for (int i = 0U; i != cpp::numeric_limits<T>::digits; ++i) {
auto lhs = T(T(1) << size_t(i));
- EXPECT_EQ(first_leading_one<T>(lhs),
- cpp::numeric_limits<T>::digits - i);
-
+ EXPECT_EQ(first_leading_one<T>(lhs), cpp::numeric_limits<T>::digits - i);
}
}
diff --git a/libc/test/src/stdio/printf_core/parser_test.cpp b/libc/test/src/stdio/printf_core/parser_test.cpp
index 61149f30c78c6..9d192828860f7 100644
--- a/libc/test/src/stdio/printf_core/parser_test.cpp
+++ b/libc/test/src/stdio/printf_core/parser_test.cpp
@@ -97,7 +97,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArg) {
expected.has_conv = true;
expected.raw_string = {str, 2};
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -132,7 +133,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithFlags) {
LIBC_NAMESPACE::printf_core::FormatFlags::LEADING_ZEROES |
LIBC_NAMESPACE::printf_core::FormatFlags::SPACE_PREFIX |
LIBC_NAMESPACE::printf_core::FormatFlags::ALTERNATE_FORM);
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -149,7 +151,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithWidth) {
expected.raw_string = {str, 4};
expected.min_width = 12;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -166,7 +169,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithPrecision) {
expected.raw_string = {str, 5};
expected.precision = 34;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -183,7 +187,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithTrivialPrecision) {
expected.raw_string = {str, 3};
expected.precision = 0;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -200,7 +205,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithShortLengthModifier) {
expected.raw_string = {str, 3};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::h;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -217,7 +223,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithLongLengthModifier) {
expected.raw_string = {str, 4};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::ll;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -235,7 +242,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithBitWidthLengthModifier) {
expected.raw_string = {str, 5};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::w;
expected.bit_width = 32;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -253,7 +261,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithFastBitWidthLengthModifier) {
expected.raw_string = {str, 6};
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::wf;
expected.bit_width = 32;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -276,7 +285,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithAllOptions) {
expected.min_width = 56;
expected.precision = 78;
expected.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::j;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -294,7 +304,8 @@ TEST(LlvmLibcPrintfParserTest, EvalThreeArgs) {
expected0.has_conv = true;
expected0.raw_string = {str, 2};
- expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected0.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected0, format_arr[0]);
@@ -329,7 +340,8 @@ TEST(LlvmLibcPrintfParserTest, EvalOneArgWithOverflowingWidthAndPrecision) {
expected.flags = LIBC_NAMESPACE::printf_core::FormatFlags::LEFT_JUSTIFIED;
expected.min_width = INT_MAX;
expected.precision = INT_MAX;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -351,7 +363,8 @@ TEST(LlvmLibcPrintfParserTest,
expected.flags = LIBC_NAMESPACE::printf_core::FormatFlags::LEFT_JUSTIFIED;
expected.min_width = INT_MAX;
expected.precision = arg2;
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg3);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg3);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -369,7 +382,8 @@ TEST(LlvmLibcPrintfParserTest, IndexModeOneArg) {
expected.has_conv = true;
expected.raw_string = {str, 4};
- expected.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected, format_arr[0]);
@@ -387,7 +401,8 @@ TEST(LlvmLibcPrintfParserTest, IndexModeThreeArgsSequential) {
expected0.has_conv = true;
expected0.raw_string = {str, 4};
- expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected0.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected0, format_arr[0]);
@@ -421,7 +436,8 @@ TEST(LlvmLibcPrintfParserTest, IndexModeThreeArgsReverse) {
expected0.has_conv = true;
expected0.raw_string = {str, 4};
- expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected0.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
ASSERT_PFORMAT_EQ(expected0, format_arr[0]);
@@ -485,7 +501,8 @@ TEST(LlvmLibcPrintfParserTest, IndexModeComplexParsing) {
expected1.raw_string = {str + 12, 6};
expected1.length_modifier = LIBC_NAMESPACE::printf_core::LengthModifier::ll;
- expected1.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg3);
+ expected1.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg3);
expected1.conv_name = 'u';
EXPECT_PFORMAT_EQ(expected1, format_arr[1]);
@@ -546,7 +563,8 @@ TEST(LlvmLibcPrintfParserTest, IndexModeComplexParsing) {
expected9.raw_string = {str + 41, 7};
expected9.min_width = 1;
expected9.precision = 1;
- expected9.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected9.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected9.conv_name = 'c';
EXPECT_PFORMAT_EQ(expected9, format_arr[9]);
@@ -566,14 +584,16 @@ TEST(LlvmLibcPrintfParserTest, IndexModeGapCheck) {
expected0.has_conv = true;
expected0.raw_string = {str, 4};
- expected0.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
+ expected0.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg1);
expected0.conv_name = 'd';
EXPECT_PFORMAT_EQ(expected0, format_arr[0]);
expected1.has_conv = true;
expected1.raw_string = {str + 4, 4};
- expected1.conv_val_raw = static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg2);
+ expected1.conv_val_raw =
+ static_cast<LIBC_NAMESPACE::fputil::FPBits<double>::StorageType>(arg2);
expected1.conv_name = 'd';
EXPECT_PFORMAT_EQ(expected1, format_arr[1]);
diff --git a/libc/test/src/string/memmove_test.cpp b/libc/test/src/string/memmove_test.cpp
index 6f1f22fc17610..1e225e58ca1eb 100644
--- a/libc/test/src/string/memmove_test.cpp
+++ b/libc/test/src/string/memmove_test.cpp
@@ -93,7 +93,8 @@ TEST(LlvmLibcMemmoveTest, SizeSweep) {
Randomize(Buffer);
for (int Size = 0; Size < kMaxSize; ++Size)
for (int Overlap = -1; Overlap < Size;) {
- ASSERT_TRUE(CheckMemmove<Adaptor>(Buffer, static_cast<size_t>(Size), Overlap));
+ ASSERT_TRUE(
+ CheckMemmove<Adaptor>(Buffer, static_cast<size_t>(Size), Overlap));
// Prevent quadratic behavior by skipping offset above kDenseOverlap.
if (Overlap > kDenseOverlap)
Overlap *= 2;
diff --git a/libc/test/src/string/memory_utils/memory_check_utils.h b/libc/test/src/string/memory_utils/memory_check_utils.h
index e888ba2466524..db9cfda672b21 100644
--- a/libc/test/src/string/memory_utils/memory_check_utils.h
+++ b/libc/test/src/string/memory_utils/memory_check_utils.h
@@ -185,8 +185,10 @@ template <auto FnImpl>
inline bool CheckMemmove(cpp::span<char> buffer, size_t size, int overlap) {
LIBC_ASSERT(buffer.size() > (2 * size + 1));
const size_t half_size = buffer.size() / 2;
- LIBC_ASSERT(static_cast<size_t>(overlap >= 0 ? overlap : -overlap) < half_size);
- cpp::span<char> head = buffer.first(half_size + static_cast<size_t>(overlap)).last(size);
+ LIBC_ASSERT(static_cast<size_t>(overlap >= 0 ? overlap : -overlap) <
+ half_size);
+ cpp::span<char> head =
+ buffer.first(half_size + static_cast<size_t>(overlap)).last(size);
cpp::span<char> tail = buffer.last(half_size).first(size);
LIBC_ASSERT(head.size() == size);
LIBC_ASSERT(tail.size() == size);
diff --git a/libc/test/src/strings/bcopy_test.cpp b/libc/test/src/strings/bcopy_test.cpp
index a2b9a2f63e431..6daa634cab888 100644
--- a/libc/test/src/strings/bcopy_test.cpp
+++ b/libc/test/src/strings/bcopy_test.cpp
@@ -87,7 +87,8 @@ TEST(LlvmLibcBcopyTest, SizeSweep) {
Randomize(Buffer);
for (int Size = 0; Size < kMaxSize; ++Size)
for (int Overlap = -1; Overlap < Size;) {
- ASSERT_TRUE(CheckMemmove<Adaptor>(Buffer, static_cast<size_t>(Size), Overlap));
+ ASSERT_TRUE(
+ CheckMemmove<Adaptor>(Buffer, static_cast<size_t>(Size), Overlap));
// Prevent quadratic behavior by skipping offset above kDenseOverlap.
if (Overlap > kDenseOverlap)
Overlap *= 2;
>From 293c5432b79f194a5a6b7d4d1692accf22fd16f7 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Tue, 25 Feb 2025 21:27:22 -0500
Subject: [PATCH 46/52] clock_t
---
libc/test/UnitTest/LibcTest.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libc/test/UnitTest/LibcTest.cpp b/libc/test/UnitTest/LibcTest.cpp
index afb1368f00905..ca358c73a8073 100644
--- a/libc/test/UnitTest/LibcTest.cpp
+++ b/libc/test/UnitTest/LibcTest.cpp
@@ -16,6 +16,7 @@
#include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT128
#include "src/__support/uint128.h"
#include "test/UnitTest/TestLogger.h"
+#include <_types/_uint64_t.h>
#if __STDC_HOSTED__
#include <time.h>
@@ -158,13 +159,13 @@ int Test::runTests(const TestOptions &Options) {
}
tlog << green << "[ RUN ] " << reset << TestName << '\n';
- [[maybe_unused]] const uint64_t start_time = clock();
+ [[maybe_unused]] const uint64_t start_time = static_cast<uint64_t>(clock());
RunContext Ctx;
T->SetUp();
T->setContext(&Ctx);
T->Run();
T->TearDown();
- [[maybe_unused]] const uint64_t end_time = clock();
+ [[maybe_unused]] const uint64_t end_time = static_cast<uint64_t>(clock());
switch (Ctx.status()) {
case RunContext::RunResult::Fail:
tlog << red << "[ FAILED ] " << reset << TestName << '\n';
>From 2f0cccb1cdea5e2c15322c2e335177fb47fad7d1 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Tue, 25 Feb 2025 21:34:03 -0500
Subject: [PATCH 47/52] conform to poll.h API
---
libc/test/UnitTest/ExecuteFunction.h | 4 ++--
libc/test/UnitTest/ExecuteFunctionUnix.cpp | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/libc/test/UnitTest/ExecuteFunction.h b/libc/test/UnitTest/ExecuteFunction.h
index 511249be0f3c9..e8c681f987c0d 100644
--- a/libc/test/UnitTest/ExecuteFunction.h
+++ b/libc/test/UnitTest/ExecuteFunction.h
@@ -25,7 +25,7 @@ struct ProcessStatus {
int platform_defined;
const char *failure = nullptr;
- static constexpr unsigned TIMEOUT = ~0U;
+ static constexpr int TIMEOUT = ~0U;
static ProcessStatus error(const char *error) { return {0, error}; }
static ProcessStatus timed_out_ps() {
@@ -43,7 +43,7 @@ struct ProcessStatus {
ProcessStatus
invoke_in_subprocess(FunctionCaller *func,
- unsigned timeout_ms = ProcessStatus::TIMEOUT);
+ int timeout_ms = ProcessStatus::TIMEOUT);
const char *signal_as_string(int signum);
diff --git a/libc/test/UnitTest/ExecuteFunctionUnix.cpp b/libc/test/UnitTest/ExecuteFunctionUnix.cpp
index c90d7e0cb9ff1..c0e85c2144005 100644
--- a/libc/test/UnitTest/ExecuteFunctionUnix.cpp
+++ b/libc/test/UnitTest/ExecuteFunctionUnix.cpp
@@ -34,7 +34,7 @@ int ProcessStatus::get_fatal_signal() {
return WTERMSIG(platform_defined);
}
-ProcessStatus invoke_in_subprocess(FunctionCaller *func, unsigned timeout_ms) {
+ProcessStatus invoke_in_subprocess(FunctionCaller *func, int timeout_ms) {
int pipe_fds[2];
if (::pipe(pipe_fds) == -1) {
delete func;
>From 7f72f9e13ccb14b75034254fed2f5e207431601f Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Tue, 25 Feb 2025 22:08:54 -0500
Subject: [PATCH 48/52] FEnv
---
libc/src/__support/FPUtil/aarch64/FEnvImpl.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/libc/src/__support/FPUtil/aarch64/FEnvImpl.h b/libc/src/__support/FPUtil/aarch64/FEnvImpl.h
index 18b0631324f8f..a8f44dcb4d4cf 100644
--- a/libc/src/__support/FPUtil/aarch64/FEnvImpl.h
+++ b/libc/src/__support/FPUtil/aarch64/FEnvImpl.h
@@ -110,7 +110,7 @@ LIBC_INLINE int enable_except(int excepts) {
(controlWord >> FEnv::ExceptionControlFlagsBitPosition) & 0x1F;
controlWord |= (newExcepts << FEnv::ExceptionControlFlagsBitPosition);
FEnv::writeControlWord(controlWord);
- return FEnv::exceptionStatusToMacro(oldExcepts);
+ return FEnv::exceptionStatusToMacro(static_cast<uint32_t>(oldExcepts));
}
LIBC_INLINE int disable_except(int excepts) {
@@ -120,7 +120,7 @@ LIBC_INLINE int disable_except(int excepts) {
(controlWord >> FEnv::ExceptionControlFlagsBitPosition) & 0x1F;
controlWord &= ~(disabledExcepts << FEnv::ExceptionControlFlagsBitPosition);
FEnv::writeControlWord(controlWord);
- return FEnv::exceptionStatusToMacro(oldExcepts);
+ return FEnv::exceptionStatusToMacro(static_cast<uint32_t>(oldExcepts));
}
LIBC_INLINE int get_except() {
@@ -250,8 +250,8 @@ LIBC_INLINE int set_round(int mode) {
}
uint32_t controlWord = FEnv::getControlWord();
- controlWord &= ~(0x3 << FEnv::RoundingControlBitPosition);
- controlWord |= (bitValue << FEnv::RoundingControlBitPosition);
+ controlWord &= static_cast<uint32_t>(~(0x3 << FEnv::RoundingControlBitPosition));
+ controlWord |= static_cast<uint32_t>(bitValue << FEnv::RoundingControlBitPosition);
FEnv::writeControlWord(controlWord);
return 0;
>From 7f68d3412709bddd2eee4ae96a5a5e55ebdc5c13 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Tue, 25 Feb 2025 22:16:05 -0500
Subject: [PATCH 49/52] clang-format
---
libc/src/__support/FPUtil/aarch64/FEnvImpl.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/libc/src/__support/FPUtil/aarch64/FEnvImpl.h b/libc/src/__support/FPUtil/aarch64/FEnvImpl.h
index a8f44dcb4d4cf..f7e88a4a2a784 100644
--- a/libc/src/__support/FPUtil/aarch64/FEnvImpl.h
+++ b/libc/src/__support/FPUtil/aarch64/FEnvImpl.h
@@ -250,8 +250,10 @@ LIBC_INLINE int set_round(int mode) {
}
uint32_t controlWord = FEnv::getControlWord();
- controlWord &= static_cast<uint32_t>(~(0x3 << FEnv::RoundingControlBitPosition));
- controlWord |= static_cast<uint32_t>(bitValue << FEnv::RoundingControlBitPosition);
+ controlWord &=
+ static_cast<uint32_t>(~(0x3 << FEnv::RoundingControlBitPosition));
+ controlWord |=
+ static_cast<uint32_t>(bitValue << FEnv::RoundingControlBitPosition);
FEnv::writeControlWord(controlWord);
return 0;
>From ccf6e9721bce4d129986108fd4e41faa23c2106e Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Tue, 25 Feb 2025 22:28:57 -0500
Subject: [PATCH 50/52] clang-format
---
libc/test/UnitTest/ExecuteFunction.h | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/libc/test/UnitTest/ExecuteFunction.h b/libc/test/UnitTest/ExecuteFunction.h
index e8c681f987c0d..4a01e9cc04045 100644
--- a/libc/test/UnitTest/ExecuteFunction.h
+++ b/libc/test/UnitTest/ExecuteFunction.h
@@ -41,9 +41,8 @@ struct ProcessStatus {
int get_fatal_signal();
};
-ProcessStatus
-invoke_in_subprocess(FunctionCaller *func,
- int timeout_ms = ProcessStatus::TIMEOUT);
+ProcessStatus invoke_in_subprocess(FunctionCaller *func,
+ int timeout_ms = ProcessStatus::TIMEOUT);
const char *signal_as_string(int signum);
>From 7874c3b52591f8adfaf6f55bd7b413b92fd25e16 Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Tue, 25 Feb 2025 22:36:44 -0500
Subject: [PATCH 51/52] bad include
---
libc/test/UnitTest/LibcTest.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/libc/test/UnitTest/LibcTest.cpp b/libc/test/UnitTest/LibcTest.cpp
index ca358c73a8073..681ebc28ea4c0 100644
--- a/libc/test/UnitTest/LibcTest.cpp
+++ b/libc/test/UnitTest/LibcTest.cpp
@@ -16,7 +16,6 @@
#include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT128
#include "src/__support/uint128.h"
#include "test/UnitTest/TestLogger.h"
-#include <_types/_uint64_t.h>
#if __STDC_HOSTED__
#include <time.h>
>From ee871ca83c705b818207af83dca986606007023b Mon Sep 17 00:00:00 2001
From: Vinay Deshmukh <32487576+vinay-deshmukh at users.noreply.github.com>
Date: Tue, 25 Feb 2025 22:38:22 -0500
Subject: [PATCH 52/52] timeout
---
libc/test/UnitTest/ExecuteFunction.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libc/test/UnitTest/ExecuteFunction.h b/libc/test/UnitTest/ExecuteFunction.h
index 4a01e9cc04045..51125f7a499b2 100644
--- a/libc/test/UnitTest/ExecuteFunction.h
+++ b/libc/test/UnitTest/ExecuteFunction.h
@@ -10,6 +10,7 @@
#define LLVM_LIBC_TEST_UNITTEST_EXECUTEFUNCTION_H
#include "src/__support/macros/config.h"
+#include "src/__support/CPP/limits.h"
#include <stdint.h>
namespace LIBC_NAMESPACE_DECL {
@@ -25,7 +26,7 @@ struct ProcessStatus {
int platform_defined;
const char *failure = nullptr;
- static constexpr int TIMEOUT = ~0U;
+ static constexpr int TIMEOUT = cpp::numeric_limits<int>::max();
static ProcessStatus error(const char *error) { return {0, error}; }
static ProcessStatus timed_out_ps() {
More information about the libc-commits
mailing list