strlen.c: Do not use strcpy.
authorBen Elliston <bje@au.ibm.com>
Wed, 25 Oct 2006 22:58:27 +0000 (22:58 +0000)
committerBen Elliston <bje@gcc.gnu.org>
Wed, 25 Oct 2006 22:58:27 +0000 (08:58 +1000)
* gcc.c-torture/execute/builtins/strlen.c: Do not use strcpy.
Copy the strings manually, as strcpy may call strlen.

From-SVN: r118045

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c

index b90afcc3de2fd2fc56e4e36f81b2f00774e70735..c9d9df92a916ca4b3645fa69f90ab139f7fff17e 100644 (file)
@@ -1,3 +1,8 @@
+2006-10-26  Ben Elliston  <bje@au.ibm.com>
+
+       * gcc.c-torture/execute/builtins/strlen.c: Do not use strcpy.
+       Copy the strings manually, as strcpy may call strlen.
+
 2006-10-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * gcc.dg/torture/builtin-math-2.c (TESTIT): Use new helper macro.
index cf77294713ada890b04ef1d639851d868b164a79..3d84c61fd4cb6320252a7e3ebd7d7bbe08b882f7 100644 (file)
@@ -8,7 +8,14 @@
    Additional tests written by Roger Sayle, 11/02/2001:
    Ensure all builtin strlen comparisons against zero are optimized
    and perform correctly. The multiple calls to strcpy are to prevent
-   the potentially "pure" strlen calls from being removed by CSE. */
+   the potentially "pure" strlen calls from being removed by CSE.
+
+   Modifed by Ben Elliston, 2006-10-25:
+   The multiple calls to strcpy that Roger mentions above are
+   problematic on systems where strcpy is implemented using strlen
+   (which this test overrides to call abort).  So, rather than use
+   strcpy, we perform the identical operations using array indexing
+   and char assignments.  */
 
 extern void abort (void);
 extern __SIZE_TYPE__ strlen (const char *);
@@ -33,27 +40,27 @@ main_test(void)
     abort ();
 
   ptr = str;
-  strcpy (ptr, "nts");
+  ptr[0] = 'n'; ptr[1] = 't'; ptr[2] = 's'; ptr[3] = '\0';
   if (strlen (ptr) == 0)
     abort ();
 
-  strcpy (ptr, "nts");
+  ptr[0] = 'n'; ptr[1] = 't'; ptr[2] = 's'; ptr[3] = '\0';
   if (strlen (ptr) < 1)
     abort ();
 
-  strcpy (ptr, "nts");
+  ptr[0] = 'n'; ptr[1] = 't'; ptr[2] = 's'; ptr[3] = '\0';
   if (strlen (ptr) <= 0)
     abort ();
 
-  strcpy (ptr, "nts");
+  ptr[0] = 'n'; ptr[1] = 't'; ptr[2] = 's'; ptr[3] = '\0';
   if (strlen (ptr+3) != 0)
     abort ();
 
-  strcpy (ptr, "nts");
+  ptr[0] = 'n'; ptr[1] = 't'; ptr[2] = 's'; ptr[3] = '\0';
   if (strlen (ptr+3) > 0)
     abort ();
 
-  strcpy (ptr, "nts");
+  ptr[0] = 'n'; ptr[1] = 't'; ptr[2] = 's'; ptr[3] = '\0';
   if (strlen (str+3) >= 1)
     abort ();