[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