Skip to content

Commit 2f6a879

Browse files
authored
[libc] Use cpp::numeric_limits in preference to C23 <limits.h> macros (#102665)
This updates some code to consistently use cpp::numeric_limits, the src/__support polyfill for std::numeric_limits, rather than the C <limits.h> macros. This is in keeping with the general C++-oriented style in libc code, and also sidesteps issues about the new C23 *_WIDTH macros that the compiler-provided header does not define outside C23 mode. Bug: https://issues.fuchsia.dev/358196552
1 parent d179acd commit 2f6a879

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

libc/src/stdio/printf_core/parser.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include "include/llvm-libc-macros/stdfix-macros.h"
1313
#include "src/__support/CPP/algorithm.h" // max
14+
#include "src/__support/CPP/limits.h"
1415
#include "src/__support/CPP/optional.h"
1516
#include "src/__support/CPP/type_traits.h"
1617
#include "src/__support/macros/config.h"
@@ -210,11 +211,11 @@ template <typename ArgProvider> class Parser {
210211
case (LengthModifier::wf):
211212
if (bw == 0) {
212213
section.has_conv = false;
213-
} else if (bw <= INT_WIDTH) {
214+
} else if (bw <= cpp::numeric_limits<int>::digits) {
214215
WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, int, conv_index);
215-
} else if (bw <= LONG_WIDTH) {
216+
} else if (bw <= cpp::numeric_limits<long>::digits) {
216217
WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, long, conv_index);
217-
} else if (bw <= LLONG_WIDTH) {
218+
} else if (bw <= cpp::numeric_limits<long long>::digits) {
218219
WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, long long, conv_index);
219220
} else {
220221
WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, intmax_t, conv_index);

libc/test/src/stdbit/stdc_bit_floor_ui_test.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ TEST(LlvmLibcStdcBitfloorUiTest, Zero) {
1515
}
1616

1717
TEST(LlvmLibcStdcBitfloorUiTest, Ones) {
18-
for (unsigned i = 0U; i != INT_WIDTH; ++i)
19-
EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_floor_ui(UINT_MAX >> i),
20-
1U << (UINT_WIDTH - i - 1));
18+
for (unsigned i = 0U; i != LIBC_NAMESPACE::cpp::numeric_limits<int>::digits;
19+
++i)
20+
EXPECT_EQ(
21+
LIBC_NAMESPACE::stdc_bit_floor_ui(
22+
LIBC_NAMESPACE::cpp::numeric_limits<unsigned int>::max() >> i),
23+
1U << (LIBC_NAMESPACE::cpp::numeric_limits<unsigned int>::digits - i -
24+
1));
2125
}

libc/test/src/stdbit/stdc_leading_zeros_ui_test.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@
1212
#include <stddef.h>
1313

1414
TEST(LlvmLibcStdcLeadingZerosUiTest, Zero) {
15-
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_ui(0U),
16-
static_cast<unsigned>(INT_WIDTH));
15+
EXPECT_EQ(
16+
LIBC_NAMESPACE::stdc_leading_zeros_ui(0U),
17+
static_cast<unsigned>(LIBC_NAMESPACE::cpp::numeric_limits<int>::digits));
1718
}
1819

1920
TEST(LlvmLibcStdcLeadingZerosUiTest, OneHot) {
20-
for (unsigned i = 0U; i != INT_WIDTH; ++i)
21+
for (unsigned i = 0U; i != LIBC_NAMESPACE::cpp::numeric_limits<int>::digits;
22+
++i)
2123
EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_ui(1U << i),
22-
INT_WIDTH - i - 1);
24+
LIBC_NAMESPACE::cpp::numeric_limits<int>::digits - i - 1);
2325
}

0 commit comments

Comments
 (0)