Commit 890154a8 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 042fed79
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> 2008-11-18 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/38135 PR libfortran/38135
......
...@@ -188,18 +188,28 @@ int mymemcmp (const void *s1, const void *s2, size_t len) ...@@ -188,18 +188,28 @@ int mymemcmp (const void *s1, const void *s2, size_t len)
return mymemcmp3 (srcp1, srcp2, len / (sizeof (unsigned long int))); return mymemcmp3 (srcp1, srcp2, len / (sizeof (unsigned long int)));
} }
char buf[256] __attribute__((aligned (16))); char buf[256];
char buf2[256] __attribute__((aligned (16)));
int int
main (void) 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); "\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); "\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 (); __builtin_abort ();
return 0; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment