[PATCH] Hide 0 size passed to memset/bzero from compiler
H.J. Lu
hjl.tools@gmail.com
Mon Dec 16 21:56:14 GMT 2024
Hide 0 size passed to memset/bzero from compiler since compiler may reject
0 size. Clang 19 issues an error in such case:
./tester.c:1345:29: error: 'size' argument to memset is '0'; did you mean to transpose the last two arguments? [-Werror,-Wmemset-transposed-args]
1345 | (void) memset(one+2, 'y', 0);
| ^
./tester.c:1345:29: note: parenthesize the third argument to silence
./tester.c:1432:16: error: 'size' argument to bzero is '0' [-Werror,-Wsuspicious-bzero]
1432 | bzero(one+2, 0);
| ^
./tester.c:1432:16: note: parenthesize the second argument to silence
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
string/tester.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/string/tester.c b/string/tester.c
index ee96747280..ae0c6a5541 100644
--- a/string/tester.c
+++ b/string/tester.c
@@ -69,6 +69,10 @@ DIAG_IGNORE_NEEDS_COMMENT (7, "-Wstringop-overflow=");
const char *it = "<UNSET>"; /* Routine name for message routines. */
size_t errors = 0;
+/* NB: Hide 0 size from compiler since compiler may reject 0 size passed
+ to memset and bzero. */
+size_t size_zero = 0;
+
/* Complain if condition is not true. */
static void
check (int thing, int number)
@@ -1342,7 +1346,7 @@ test_memset (void)
check(memset(one+1, 'x', 3) == one+1, 1); /* Return value. */
equal(one, "axxxefgh", 2); /* Basic test. */
- (void) memset(one+2, 'y', 0);
+ (void) memset(one+2, 'y', size_zero);
equal(one, "axxxefgh", 3); /* Zero-length set. */
(void) memset(one+5, 0, 1);
@@ -1429,7 +1433,7 @@ test_bzero (void)
equal(one+4, "ef", 3);
(void) strcpy(one, "abcdef");
- bzero(one+2, 0);
+ bzero(one+2, size_zero);
equal(one, "abcdef", 4); /* Zero-length copy. */
}
--
2.47.1
More information about the Libc-alpha
mailing list