aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2003-05-05 21:31:35 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2003-05-05 21:31:35 +0200
commite3e9f1084699af912b12b5a63c64c72dc868854f (patch)
tree28d5a88a130f796c626606f2d26616bec3b414a9 /gcc/testsuite
parent6035d635b5b0bfb86fcb6413f6828d18ab4cf1f2 (diff)
downloadgcc-e3e9f1084699af912b12b5a63c64c72dc868854f.zip
gcc-e3e9f1084699af912b12b5a63c64c72dc868854f.tar.gz
gcc-e3e9f1084699af912b12b5a63c64c72dc868854f.tar.bz2
builtins.c (expand_builtin_mempcpy): New function.
* builtins.c (expand_builtin_mempcpy): New function. (expand_builtin_stpcpy): Optimize stpcpy whose return value is ignored into strcpy no matter what arguments it has. (expand_builtin) <case BUILT_IN_MEMPCPY>: Call expand_builtin_mempcpy. * gcc.c-torture/execute/string-opt-18.c (main): Add 3 new tests. From-SVN: r66498
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/string-opt-18.c14
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 92a7679..536043a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-05-05 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/execute/string-opt-18.c (main): Add 3 new tests.
+
2003-05-05 Geoffrey Keating <geoffk@apple.com>
* gcc.dg/unused-5.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/string-opt-18.c b/gcc/testsuite/gcc.c-torture/execute/string-opt-18.c
index 0ba2be6..dfa5c16 100644
--- a/gcc/testsuite/gcc.c-torture/execute/string-opt-18.c
+++ b/gcc/testsuite/gcc.c-torture/execute/string-opt-18.c
@@ -15,6 +15,9 @@ extern int memcmp (const void *, const void *, size_t);
const char s1[] = "123";
char p[32] = "";
+char *s2 = "defg";
+char *s3 = "FGH";
+size_t l1 = 1;
int main()
{
@@ -60,6 +63,17 @@ int main()
if (__builtin_mempcpy (p, "ABCDE", 6) != p + 6 || memcmp (p, "ABCDE", 6))
abort ();
+ /* If the result of stpcpy/mempcpy is ignored, gcc should use
+ strcpy/memcpy. */
+ stpcpy (p + 3, s2);
+ if (memcmp (p, "ABCdefg", 8))
+ abort ();
+ mempcpy (p + 5, s3, 1);
+ if (memcmp (p, "ABCdeFg", 8))
+ abort ();
+ mempcpy (p + 6, s3 + 1, l1);
+ if (memcmp (p, "ABCdeFG", 8))
+ abort ();
return 0;
}