[libc-commits] [libc] a21cf56 - [libc] Fix use of cpp::numeric_limits<...>::digits (#102674)

via libc-commits libc-commits at lists.llvm.org
Fri Aug 9 13:09:26 PDT 2024


Author: Roland McGrath
Date: 2024-08-09T13:09:23-07:00
New Revision: a21cf5663c3e757e98a396e47471af63bd4955b0

URL: https://github.com/llvm/llvm-project/commit/a21cf5663c3e757e98a396e47471af63bd4955b0
DIFF: https://github.com/llvm/llvm-project/commit/a21cf5663c3e757e98a396e47471af63bd4955b0.diff

LOG: [libc] Fix use of cpp::numeric_limits<...>::digits (#102674)

The previous change replaced INT_WIDTH with
cpp::numberic_limits<int>::digits, but these don't have the same
value.  While INT_WIDTH == UINT_WIDTH, not so for ::digits, so
use cpp::numberic_limits<unsigned int>::digits et al instead for
the intended effects.

Bug: https://issues.fuchsia.dev/358196552

Added: 
    

Modified: 
    libc/src/stdio/printf_core/parser.h
    libc/test/src/stdbit/stdc_leading_zeros_ui_test.cpp

Removed: 
    


################################################################################
diff  --git a/libc/src/stdio/printf_core/parser.h b/libc/src/stdio/printf_core/parser.h
index 9a3f19a919744..684911a567569 100644
--- a/libc/src/stdio/printf_core/parser.h
+++ b/libc/src/stdio/printf_core/parser.h
@@ -211,11 +211,11 @@ template <typename ArgProvider> class Parser {
         case (LengthModifier::wf):
           if (bw == 0) {
             section.has_conv = false;
-          } else if (bw <= cpp::numeric_limits<int>::digits) {
+          } else if (bw <= cpp::numeric_limits<unsigned int>::digits) {
             WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, int, conv_index);
-          } else if (bw <= cpp::numeric_limits<long>::digits) {
+          } else if (bw <= cpp::numeric_limits<unsigned long>::digits) {
             WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, long, conv_index);
-          } else if (bw <= cpp::numeric_limits<long long>::digits) {
+          } else if (bw <= cpp::numeric_limits<unsigned long long>::digits) {
             WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, long long, conv_index);
           } else {
             WRITE_ARG_VAL_SIMPLEST(section.conv_val_raw, intmax_t, conv_index);

diff  --git a/libc/test/src/stdbit/stdc_leading_zeros_ui_test.cpp b/libc/test/src/stdbit/stdc_leading_zeros_ui_test.cpp
index f1b8363ecc8f7..c047457cc82e5 100644
--- a/libc/test/src/stdbit/stdc_leading_zeros_ui_test.cpp
+++ b/libc/test/src/stdbit/stdc_leading_zeros_ui_test.cpp
@@ -12,14 +12,15 @@
 #include <stddef.h>
 
 TEST(LlvmLibcStdcLeadingZerosUiTest, Zero) {
-  EXPECT_EQ(
-      LIBC_NAMESPACE::stdc_leading_zeros_ui(0U),
-      static_cast<unsigned>(LIBC_NAMESPACE::cpp::numeric_limits<int>::digits));
+  EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_ui(0U),
+            static_cast<unsigned>(
+                LIBC_NAMESPACE::cpp::numeric_limits<unsigned int>::digits));
 }
 
 TEST(LlvmLibcStdcLeadingZerosUiTest, OneHot) {
-  for (unsigned i = 0U; i != LIBC_NAMESPACE::cpp::numeric_limits<int>::digits;
-       ++i)
+  for (unsigned i = 0U;
+       i != LIBC_NAMESPACE::cpp::numeric_limits<unsigned int>::digits; ++i)
     EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_ui(1U << i),
-              LIBC_NAMESPACE::cpp::numeric_limits<int>::digits - i - 1);
+              LIBC_NAMESPACE::cpp::numeric_limits<unsigned int>::digits - i -
+                  1);
 }


        


More information about the libc-commits mailing list