diff --git a/ChangeLog b/ChangeLog index ab2220d9ea..4acdcc3ced 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-11-27 Siddhesh Poyarekar + + * 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 * stdio-common/tst-fmemopen.c (do_test): Cast st_size values to diff --git a/string/bits/string3.h b/string/bits/string3.h index 760609033a..801e7aca24 100644 --- a/string/bits/string3.h +++ b/string/bits/string3.h @@ -19,8 +19,10 @@ # error "Never use directly; include 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)); }