]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Don't use __warn_memset_zero_len for gcc-5.0 or newer
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 27 Nov 2014 05:45:45 +0000 (11:15 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 27 Nov 2014 05:45:45 +0000 (11:15 +0530)
gcc now warns when the arguments to memset may have been accidentally
transposed (i.e. length set to zero instead of the byte), so we don't
need that bit of the code in glibc headers anymore.

Tested on x86_64.  Coe generated by gcc 4.8 is identical with or
without the patch.  I also tested gcc master, which does not result in
any new failures.  It does fail quite a few FORTIFY_SOURCE tests, but
those failures are not due to this patch.

ChangeLog
string/bits/string3.h

index ab2220d9ea831877b7d64b78b08cfc73001bd3ed..4acdcc3ced10e3d5f09349d348e2c1eeb173ac23 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2014-11-27  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       * string/bits/string3.h (__warn_memset_zero_len): Don't
+       declare for gcc newer than 5.0.
+       (memset): Don't test for zero-length __LEN for gcc newer than
+       5.0.
+
 2014-11-27  Joseph Myers  <joseph@codesourcery.com>
 
        * stdio-common/tst-fmemopen.c (do_test): Cast st_size values to
index 760609033a1c591ecc414bdba4c3fdfc235f274e..801e7aca24880b9fb4882dd63891f01bdc680f3e 100644 (file)
 # error "Never use <bits/string3.h> directly; include <string.h> instead."
 #endif
 
+#if !__GNUC_PREREQ (5,0)
 __warndecl (__warn_memset_zero_len,
            "memset used with constant zero length parameter; this could be due to transposed parameters");
+#endif
 
 #ifndef __cplusplus
 /* XXX This is temporarily.  We should not redefine any of the symbols
@@ -75,12 +77,16 @@ __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
 __fortify_function void *
 __NTH (memset (void *__dest, int __ch, size_t __len))
 {
+  /* GCC-5.0 and newer implements these checks in the compiler, so we don't
+     need them here.  */
+#if !__GNUC_PREREQ (5,0)
   if (__builtin_constant_p (__len) && __len == 0
       && (!__builtin_constant_p (__ch) || __ch != 0))
     {
       __warn_memset_zero_len ();
       return __dest;
     }
+#endif
   return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
 }