[Bug middle-end/58981] [4.9 Regression] FAIL: gcc.target/i386/memset-1.c execution test
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Nov 4 06:03:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58981
--- Comment #6 from H.J. Lu <hjl.tools at gmail dot com> ---
A testcase for memcpy:
[hjl@gnu-32 gcc]$ cat /tmp/memcpy-2.c
/* { dg-do run } */
/* { dg-options "-O2 -minline-all-stringops" } */
extern void abort (void);
extern void exit (int);
#define MAX_OFFSET (sizeof (long long))
#define MAX_COPY (8 * sizeof (long long))
#define MAX_EXTRA (sizeof (long long))
#define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA)
static union {
char buf[MAX_LENGTH];
long long align_int;
long double align_fp;
} u;
char A[MAX_LENGTH];
main ()
{
int off, len, i;
char *p, *q;
for (i = 0; i < MAX_LENGTH; i++)
A[i] = 'A';
for (off = 0; off < MAX_OFFSET; off++)
for (len = 1; len < MAX_COPY; len++)
{
for (i = 0; i < MAX_LENGTH; i++)
u.buf[i] = 'a';
p = __builtin_memcpy (u.buf + off, A, len);
if (p != u.buf + off)
abort ();
q = u.buf;
for (i = 0; i < off; i++, q++)
if (*q != 'a')
abort ();
for (i = 0; i < len; i++, q++)
if (*q != 'A')
abort ();
for (i = 0; i < MAX_EXTRA; i++, q++)
if (*q != 'a')
abort ();
}
exit(0);
}
[hjl@gnu-32 gcc]$ ./xgcc -B./ -O2 -mx32 /tmp/memcpy-2.c -minline-all-stringops
[hjl@gnu-32 gcc]$ ./a.out
Segmentation fault
[hjl@gnu-32 gcc]$
More information about the Gcc-bugs
mailing list