On Thu, Jan 30, 2014 at 10:43 AM, Richard Sandiford <rdsandif...@googlemail.com> wrote: > Hi H.J., > > "H.J. Lu" <hjl.to...@gmail.com> writes: >> diff --git a/gcc/testsuite/gcc.dg/pr59605.c b/gcc/testsuite/gcc.dg/pr59605.c >> new file mode 100644 >> index 0000000..4556843 >> --- /dev/null >> +++ b/gcc/testsuite/gcc.dg/pr59605.c >> @@ -0,0 +1,55 @@ >> +/* { dg-do run } */ >> +/* { dg-options "-O2" } */ >> +/* { dg-additional-options "-minline-stringops-dynamically" { target { >> i?86-*-* x86_64-*-* } } } */ >> + >> +extern void abort (void); >> + >> +#define MAX_OFFSET (sizeof (long long)) >> +#define MAX_COPY (1024 + 8192) >> +#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]; >> + >> +int >> +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 (); >> + } >> + >> + return 0; >> +} > > The innermost loop bodies are executed over 6x10⁸ times on most targets > and so the test times out for me when using the GDB MIPS simulator. > I'm not sure what the best fix is though. E.g.: > > 1. It looks like the PR was for a compile-time failure rather than a run-time > failure, so one option might be to drop it to dg-do compile. That'd lose > a nice executable conformance test though. I don't like this option. > > 2. We could drop it to dg-do compile for simulator targets only. That's still > lose some conformance testing for simulator targets. > > 3. We could use a smaller MAX_COPY for simulator targets, which is typically > how check_effective_target_simulator is used. I'm not sure whether having > a smaller MAX_COPY would defeat the original ICE test though. > > 4. We could split the test into two, a dg-do compile one and a dg-do run one. > We could then do (3) on the run one. > > But there are probably other alternatives too. > > I'm willing to do the patch, but has anyone got any suggestions for > what would be best? >
Can you reduce the loop count and still trigger the bug without the fix? -- H.J.