From 890154a8b65532d96f4853ca32d98b6e555ffa21 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 19 Nov 2008 00:01:35 +0100 Subject: [PATCH] re PR tree-optimization/38051 (Miscompilation of glibc's memcmp) PR tree-optimization/38051 * gcc.c-torture/execute/pr38051.c (buf): Remove aligned attribute. (buf2): Removed. (main): Only run on little endian targets with sizeof (long) == sizeof (void *). Use just one buffer, align the pointers at runtime. From-SVN: r141983 --- gcc/testsuite/ChangeLog | 9 +++++++++ gcc/testsuite/gcc.c-torture/execute/pr38051.c | 22 ++++++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a2b3096..4f49d7f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2008-11-18 Jakub Jelinek + + PR tree-optimization/38051 + * gcc.c-torture/execute/pr38051.c (buf): Remove aligned attribute. + (buf2): Removed. + (main): Only run on little endian targets with + sizeof (long) == sizeof (void *). Use just one buffer, align the + pointers at runtime. + 2008-11-18 Thomas Koenig PR libfortran/38135 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr38051.c b/gcc/testsuite/gcc.c-torture/execute/pr38051.c index 3437f73..e3b6dd9 100644 --- a/gcc/testsuite/gcc.c-torture/execute/pr38051.c +++ b/gcc/testsuite/gcc.c-torture/execute/pr38051.c @@ -188,18 +188,28 @@ int mymemcmp (const void *s1, const void *s2, size_t len) return mymemcmp3 (srcp1, srcp2, len / (sizeof (unsigned long int))); } -char buf[256] __attribute__((aligned (16))); -char buf2[256] __attribute__((aligned (16))); +char buf[256]; int main (void) { - __builtin_memcpy (buf + 9, + char *p; + union { long int l; char c[sizeof (long int)]; } u; + + /* The test above assumes little endian and long being the same size + as pointer. */ + if (sizeof (long int) != sizeof (void *) || sizeof (long int) < 4) + return 0; + u.l = 0x12345678L; + if (u.c[0] != 0x78 || u.c[1] != 0x56 || u.c[2] != 0x34 || u.c[3] != 0x12) + return 0; + + p = buf + 16 - (((long int) buf) & 15); + __builtin_memcpy (p + 9, "\x1\x37\x82\xa7\x55\x49\x9d\xbf\xf8\x44\xb6\x55\x17\x8e\xf9", 15); - __builtin_memcpy (buf2 + 24, + __builtin_memcpy (p + 128 + 24, "\x1\x37\x82\xa7\x55\x49\xd0\xf3\xb7\x2a\x6d\x23\x71\x49\x6a", 15); - if (mymemcmp (buf + 9, buf2 + 24, 33) != -51) + if (mymemcmp (p + 9, p + 128 + 24, 33) != -51) __builtin_abort (); return 0; } - -- 2.7.4