strlen.c: Do not use strcpy.

* gcc.c-torture/execute/builtins/strlen.c: Do not use strcpy.
	Copy the strings manually, as strcpy may call strlen.

From-SVN: r118045
This commit is contained in:
Ben Elliston 2006-10-25 22:58:27 +00:00 committed by Ben Elliston
parent 6db63df90f
commit 377d876f81
2 changed files with 19 additions and 7 deletions

View 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.

View 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 ();