summaryrefslogtreecommitdiff
path: root/libc/src/string
diff options
context:
space:
mode:
authorVinay Deshmukh <32487576+vinay-deshmukh@users.noreply.github.com>2025-03-10 11:57:09 -0400
committerGitHub <noreply@github.com>2025-03-10 11:57:09 -0400
commit257e48371546f75623482071fc39eef4b64fbd88 (patch)
treea925e2bae1efbfd4e395a16b3259421e00aa909e /libc/src/string
parentc40f0fe4348bb9304b95bd317665bf1cb2bdcc85 (diff)
[libc] Add `-Wno-sign-conversion` & re-attempt `-Wconversion` (#129811)
Relates to https://github.com/llvm/llvm-project/issues/119281#issuecomment-2699470459
Diffstat (limited to 'libc/src/string')
-rw-r--r--libc/src/string/memory_utils/utils.h7
-rw-r--r--libc/src/string/string_utils.h14
2 files changed, 12 insertions, 9 deletions
diff --git a/libc/src/string/memory_utils/utils.h b/libc/src/string/memory_utils/utils.h
index 5c9bc72208f8..bdf0b8652188 100644
--- a/libc/src/string/memory_utils/utils.h
+++ b/libc/src/string/memory_utils/utils.h
@@ -263,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) {
@@ -297,7 +297,7 @@ LIBC_INLINE void adjust(ptrdiff_t offset, T1 *__restrict &p1,
T2 *__restrict &p2, size_t &count) {
p1 += offset;
p2 += offset;
- count -= offset;
+ count -= static_cast<size_t>(offset);
}
// Advances p1 and p2 so p1 gets aligned to the next SIZE bytes boundary
@@ -306,7 +306,8 @@ LIBC_INLINE void adjust(ptrdiff_t offset, T1 *__restrict &p1,
template <size_t SIZE, typename T1, typename T2>
void align_p1_to_next_boundary(T1 *__restrict &p1, T2 *__restrict &p2,
size_t &count) {
- adjust(distance_to_next_aligned<SIZE>(p1), p1, p2, count);
+ adjust(static_cast<ptrdiff_t>(distance_to_next_aligned<SIZE>(p1)), p1, p2,
+ count);
p1 = assume_aligned<SIZE>(p1);
}
diff --git a/libc/src/string/string_utils.h b/libc/src/string/string_utils.h
index 583d35014d39..e4659f65c93e 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);
@@ -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,14 @@ 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 +204,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;