fixinc patch for old glibc strncpy macro
Joseph S. Myers
joseph@codesourcery.com
Wed Mar 24 22:19:00 GMT 2010
This fixincludes patch adds a fix for a strncpy macro definition in
old versions of glibc's bits/string2.h that causes a warning building
GDB (see
<http://sourceware.org/ml/gdb-patches/2009-12/msg00435.html>). Tested
with no regressions with cross to i686-pc-linux-gnu using a suitably
old sysroot. OK to commit?
fixincludes:
2010-03-24 Joseph Myers <joseph@codesourcery.com>
* inclhack.def (glibc_strncpy): New fix.
* fixincl.x: Regenerate.
* tests/base/bits/string2.h: Update.
gcc/testsuite:
2010-03-24 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/strncpy-fix-1.c: New test.
Index: gcc/testsuite/gcc.dg/strncpy-fix-1.c
===================================================================
--- gcc/testsuite/gcc.dg/strncpy-fix-1.c (revision 0)
+++ gcc/testsuite/gcc.dg/strncpy-fix-1.c (revision 0)
@@ -0,0 +1,11 @@
+/* Test that use of strncpy does not result in a "value computed is
+ not used" warning. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+
+#include <string.h>
+void
+f (char *s)
+{
+ strncpy (s, "::", 2);
+}
Index: fixincludes/tests/base/bits/string2.h
===================================================================
--- fixincludes/tests/base/bits/string2.h (revision 157705)
+++ fixincludes/tests/base/bits/string2.h (working copy)
@@ -16,3 +16,8 @@
# define __STRING_INLINE extern __inline
# endif
#endif /* GLIBC_C99_INLINE_3_CHECK */
+
+
+#if defined( GLIBC_STRNCPY_CHECK )
+# define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)
+#endif /* GLIBC_STRNCPY_CHECK */
Index: fixincludes/inclhack.def
===================================================================
--- fixincludes/inclhack.def (revision 157705)
+++ fixincludes/inclhack.def (working copy)
@@ -1598,6 +1598,28 @@
};
+/* Some versions of glibc have a version of bits/string2.h that
+ produces "value computed is not used" warnings from strncpy; fix
+ this definition by using __builtin_strncpy instead as in newer
+ versions. */
+fix = {
+ hackname = glibc_strncpy;
+ files = bits/string2.h;
+ bypass = "__builtin_strncpy";
+ c_fix = format;
+ c_fix_arg = "# define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)";
+ c_fix_arg = "# define strncpy([^\n]*\\\\\n)*[^\n]*";
+ test_text = <<-EOT
+ # define strncpy(dest, src, n) \
+ (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n) \\
+ ? (strlen (src) + 1 >= ((size_t) (n)) \\
+ ? (char *) memcpy (dest, src, n) \\
+ : strncpy (dest, src, n)) \\
+ : strncpy (dest, src, n)))
+ EOT;
+
+};
+
/* glibc's tgmath.h relies on an expression that is not an integer
constant expression being treated as it was by GCC 4.4 and
earlier. */
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Gcc-patches
mailing list