[libc-commits] [libc] [libc] Fix bugs found when testing with all headers (PR #144049)
William Huynh via libc-commits
libc-commits at lists.llvm.org
Fri Jun 13 10:09:18 PDT 2025
https://github.com/saturn691 updated https://github.com/llvm/llvm-project/pull/144049
>From 70db174e29a6f9180ca655ff054d875912b50939 Mon Sep 17 00:00:00 2001
From: William Huynh <William.Huynh at arm.com>
Date: Fri, 13 Jun 2025 10:59:45 +0100
Subject: [PATCH 1/2] [libc] Fix bugs found when testing with all headers
- math.yaml: float128 guard
- wchar.yaml: __restrict keyword order
- converter_test.cpp: add float test
---
libc/include/math.yaml | 2 +-
libc/include/wchar.yaml | 20 ++++++------
.../src/stdio/printf_core/converter_test.cpp | 32 ++++++++++++++++++-
3 files changed, 42 insertions(+), 12 deletions(-)
diff --git a/libc/include/math.yaml b/libc/include/math.yaml
index 466c08ade6fc4..11bead0745954 100644
--- a/libc/include/math.yaml
+++ b/libc/include/math.yaml
@@ -734,7 +734,7 @@ functions:
- type: float128
- type: float128
- type: float128
- guards: LIBC_TYPES_HAS_FLOAT128
+ guard: LIBC_TYPES_HAS_FLOAT128
- name: ffmal
standards:
- stdc
diff --git a/libc/include/wchar.yaml b/libc/include/wchar.yaml
index 57f4f6660827e..39c3a05848dfc 100644
--- a/libc/include/wchar.yaml
+++ b/libc/include/wchar.yaml
@@ -109,24 +109,24 @@ functions:
- stdc
return_type: wchar_t *
arguments:
- - type: __restrict wchar_t *
- - type: const __restrict wchar_t *
+ - type: wchar_t *__restrict
+ - type: const wchar_t *__restrict
- type: size_t
- name: wcsncpy
standards:
- stdc
return_type: wchar_t *
arguments:
- - type: __restrict wchar_t *
- - type: const __restrict wchar_t *
+ - type: wchar_t *__restrict
+ - type: const wchar_t *__restrict
- type: size_t
- name: wcscat
standards:
- stdc
return_type: wchar_t *
arguments:
- - type: __restrict wchar_t *
- - type: const __restrict wchar_t *
+ - type: wchar_t *__restrict
+ - type: const wchar_t *__restrict
- name: wcsstr
standards:
- stdc
@@ -139,13 +139,13 @@ functions:
- stdc
return_type: wchar_t *
arguments:
- - type: __restrict wchar_t *
- - type: const __restrict wchar_t *
+ - type: wchar_t *__restrict
+ - type: const wchar_t *__restrict
- type: size_t
- name: wcscpy
standards:
- stdc
return_type: wchar_t *
arguments:
- - type: __restrict wchar_t *
- - type: const __restrict wchar_t *
+ - type: wchar_t *__restrict
+ - type: const wchar_t *__restrict
diff --git a/libc/test/src/stdio/printf_core/converter_test.cpp b/libc/test/src/stdio/printf_core/converter_test.cpp
index 96a00ae598ec2..b95328398c104 100644
--- a/libc/test/src/stdio/printf_core/converter_test.cpp
+++ b/libc/test/src/stdio/printf_core/converter_test.cpp
@@ -124,7 +124,7 @@ TEST_F(LlvmLibcPrintfConverterTest, StringConversionSimple) {
TEST_F(LlvmLibcPrintfConverterTest, StringConversionPrecisionHigh) {
LIBC_NAMESPACE::printf_core::FormatSection high_precision_conv;
high_precision_conv.has_conv = true;
- high_precision_conv.raw_string = "%4s";
+ high_precision_conv.raw_string = "%.4s";
high_precision_conv.conv_name = 's';
high_precision_conv.precision = 4;
high_precision_conv.conv_val_ptr = const_cast<char *>("456");
@@ -255,3 +255,33 @@ TEST_F(LlvmLibcPrintfConverterTest, OctConversion) {
ASSERT_STREQ(str, "1234");
ASSERT_EQ(writer.get_chars_written(), 4);
}
+
+TEST_F(LlvmLibcPrintfConverterTest, FloatConversionSimple) {
+
+ LIBC_NAMESPACE::printf_core::FormatSection section;
+ section.has_conv = true;
+ section.raw_string = "%f";
+ section.conv_name = 'f';
+ section.conv_val_raw = LIBC_NAMESPACE::cpp::bit_cast<uint64_t>(1.234567);
+ LIBC_NAMESPACE::printf_core::convert(&writer, section);
+
+ wb.buff[wb.buff_cur] = '\0';
+ ASSERT_STREQ(str, "1.234567");
+ ASSERT_EQ(writer.get_chars_written(), 8);
+}
+
+TEST_F(LlvmLibcPrintfConverterTest, FloatConversionPrecisionHigh) {
+
+ LIBC_NAMESPACE::printf_core::FormatSection section;
+ section.has_conv = true;
+ section.raw_string = "%12.3f";
+ section.conv_name = 'f';
+ section.min_width = 12;
+ section.precision = 3;
+ section.conv_val_raw = LIBC_NAMESPACE::cpp::bit_cast<uint64_t>(0.000123);
+ LIBC_NAMESPACE::printf_core::convert(&writer, section);
+
+ wb.buff[wb.buff_cur] = '\0';
+ ASSERT_STREQ(str, " 0.000");
+ ASSERT_EQ(writer.get_chars_written(), 12);
+}
>From 888461f80ee88214092702fe8a87eab21df08de0 Mon Sep 17 00:00:00 2001
From: William Huynh <William.Huynh at arm.com>
Date: Fri, 13 Jun 2025 18:09:07 +0100
Subject: [PATCH 2/2] fixup! [libc] Fix bugs found when testing with all
headers
---
.../src/stdio/printf_core/converter_test.cpp | 29 -------------------
1 file changed, 29 deletions(-)
diff --git a/libc/test/src/stdio/printf_core/converter_test.cpp b/libc/test/src/stdio/printf_core/converter_test.cpp
index b95328398c104..808b229b05d79 100644
--- a/libc/test/src/stdio/printf_core/converter_test.cpp
+++ b/libc/test/src/stdio/printf_core/converter_test.cpp
@@ -256,32 +256,3 @@ TEST_F(LlvmLibcPrintfConverterTest, OctConversion) {
ASSERT_EQ(writer.get_chars_written(), 4);
}
-TEST_F(LlvmLibcPrintfConverterTest, FloatConversionSimple) {
-
- LIBC_NAMESPACE::printf_core::FormatSection section;
- section.has_conv = true;
- section.raw_string = "%f";
- section.conv_name = 'f';
- section.conv_val_raw = LIBC_NAMESPACE::cpp::bit_cast<uint64_t>(1.234567);
- LIBC_NAMESPACE::printf_core::convert(&writer, section);
-
- wb.buff[wb.buff_cur] = '\0';
- ASSERT_STREQ(str, "1.234567");
- ASSERT_EQ(writer.get_chars_written(), 8);
-}
-
-TEST_F(LlvmLibcPrintfConverterTest, FloatConversionPrecisionHigh) {
-
- LIBC_NAMESPACE::printf_core::FormatSection section;
- section.has_conv = true;
- section.raw_string = "%12.3f";
- section.conv_name = 'f';
- section.min_width = 12;
- section.precision = 3;
- section.conv_val_raw = LIBC_NAMESPACE::cpp::bit_cast<uint64_t>(0.000123);
- LIBC_NAMESPACE::printf_core::convert(&writer, section);
-
- wb.buff[wb.buff_cur] = '\0';
- ASSERT_STREQ(str, " 0.000");
- ASSERT_EQ(writer.get_chars_written(), 12);
-}
More information about the libc-commits
mailing list