mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-28 16:01:00 +08:00
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
This commit is contained in:
parent
042fed7915
commit
890154a8b6
@ -1,3 +1,12 @@
|
||||
2008-11-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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 <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR libfortran/38135
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user