This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fixinc patch for old glibc strncpy macro


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]