Fix rawmemchr build with GCC 8.
authorJoseph Myers <joseph@codesourcery.com>
Wed, 10 May 2017 00:25:59 +0000 (00:25 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 10 May 2017 00:25:59 +0000 (00:25 +0000)
The default rawmemchr implementation uses memchr with size (size_t)-1,
which produces a warning with current GCC mainline.  The warning seems
reasonable for normal code, so this patch uses the DIAG_* macros to
disable it.

Tested (compilation of glibc only) with build-many-glibcs.py for
arm-linux-gnueabi and powerpc64le-linux-gnu, two architectures for
which the build was previously failing.  Note that the glibc testsuite
will still fail to build with GCC mainline because of
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80669>.

* string/rawmemchr.c: Include <libc-diag.h>.
(RAWMEMCHR): Disable -Wstringop-overflow around call to memchr
with size (size_t)-1.

ChangeLog
string/rawmemchr.c

index a772fce..ca56339 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2017-05-10  Joseph Myers  <joseph@codesourcery.com>
+
+       * string/rawmemchr.c: Include <libc-diag.h>.
+       (RAWMEMCHR): Disable -Wstringop-overflow around call to memchr
+       with size (size_t)-1.
+
 2017-05-09  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/mips/mips32/accept4.c: Remove file.
index 54e8dcd..42a3f8a 100644 (file)
@@ -16,6 +16,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <string.h>
+#include <libc-diag.h>
 
 #ifndef RAWMEMCHR
 # define RAWMEMCHR __rawmemchr
 void *
 RAWMEMCHR (const void *s, int c)
 {
+  DIAG_PUSH_NEEDS_COMMENT;
+#if __GNUC_PREREQ (7, 0)
+  /* GCC 8 warns about the size passed to memchr being larger than
+     PTRDIFF_MAX; the use of SIZE_MAX is deliberate here.  */
+  DIAG_IGNORE_NEEDS_COMMENT (8, "-Wstringop-overflow=");
+#endif
   if (c != '\0')
     return memchr (s, c, (size_t)-1);
+  DIAG_POP_NEEDS_COMMENT;
   return (char *)s + strlen (s);
 }
 libc_hidden_def (__rawmemchr)