diff options
author | Ben Elliston <bje@au.ibm.com> | 2006-10-25 22:58:27 +0000 |
---|---|---|
committer | Ben Elliston <bje@gcc.gnu.org> | 2006-10-26 08:58:27 +1000 |
commit | 377d876f816bd79423c8092b058bc6eadf0f21ef (patch) | |
tree | ead8385d2a1ae56a3a329acc46673c5f3a8402b0 | |
parent | 6db63df90f0937dd1d263763ed39e29d370f8a05 (diff) | |
download | gcc-377d876f816bd79423c8092b058bc6eadf0f21ef.zip gcc-377d876f816bd79423c8092b058bc6eadf0f21ef.tar.gz gcc-377d876f816bd79423c8092b058bc6eadf0f21ef.tar.bz2 |
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
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c | 21 |
2 files changed, 19 insertions, 7 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b90afcc..c9d9df9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c b/gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c index cf77294..3d84c61 100644 --- a/gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c +++ b/gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c @@ -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 (); |