Hello!

When compiling regex.c from libiberty, several warnings are emitted:

../../gcc-svn/trunk/libiberty/regex.c: In function 'byte_regex_compile':
../../gcc-svn/trunk/libiberty/regex.c:154:47: warning: right-hand
operand of comma expression has no effect [-Wunused-value]
 #      define bzero(s, n) (memset (s, '\0', n), (s))
                                               ^
../../gcc-svn/trunk/libiberty/regex.c:3126:13: note: in expansion of
macro 'bzero'
             bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
             ^

Attached patch changes the return value of the bzero macro to void, as
defined in a 4.3BSD:

       void bzero(void *s, size_t n);

As an additional benefit, the changed macro now generates warning when
its return value is used (which is *not* the case in regex.c):

--cut here--
int *arr;

#      define bzero(s, n) (memset (s, '\0', n), (void) 0)

void test (void)
{
  void *t = bzero (arr, 10000);
  (void) t;
}
--cut here--

gcc -O2 -Wall

bz.c: In function 'test':
bz.c:7:27: error: void value not ignored as it ought to be
 #      define bzero(s, n) (memset (s, '\0', n), (void) 0)
                           ^
bz.c:11:13: note: in expansion of macro 'bzero'
   void *t = bzero (arr, 10000);
             ^

2014-03-13  Uros Bizjak  <ubiz...@gmail.com>

    * regex.c (bzero) [!_LIBC]: Change return value to void.

Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu.

OK for mainline (and release branches, perhaps)?

Uros.
Index: regex.c
===================================================================
--- regex.c     (revision 208529)
+++ regex.c     (working copy)
@@ -151,7 +151,7 @@ char *realloc ();
 #    include <string.h>
 #    ifndef bzero
 #     ifndef _LIBC
-#      define bzero(s, n)      (memset (s, '\0', n), (s))
+#      define bzero(s, n)      (memset (s, '\0', n), (void) 0)
 #     else
 #      define bzero(s, n)      __bzero (s, n)
 #     endif

Reply via email to