36 lines
678 B
C
36 lines
678 B
C
/* PR rtl-optimization/44404
|
|
foo() used to be miscompiled on ARM due to a bug in auto-inc-dec.c,
|
|
which resulted in "strb r1, [r1], #-36". */
|
|
|
|
/* { dg-do run } */
|
|
/* { dg-options "-O2 -fno-unroll-loops" } */
|
|
|
|
extern char *strcpy (char *, const char *);
|
|
extern int strcmp (const char*, const char*);
|
|
extern void abort (void);
|
|
|
|
char buf[128];
|
|
|
|
void __attribute__((noinline))
|
|
bar (int a, const char *p)
|
|
{
|
|
if (strcmp (p, "0123456789abcdefghijklmnopqrstuvwxyz") != 0)
|
|
abort ();
|
|
}
|
|
|
|
void __attribute__((noinline))
|
|
foo (int a)
|
|
{
|
|
if (a)
|
|
bar (0, buf);
|
|
strcpy (buf, "0123456789abcdefghijklmnopqrstuvwxyz");
|
|
bar (0, buf);
|
|
}
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
foo (0);
|
|
return 0;
|
|
}
|