diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ecb1efb9eb4de9057deedcc3feca22cc09b53443..dfcd727337dbee95698f7760c5b6fb8932734ce0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-22 Sandra Loosemore <sandra@codesourcery.com> + + PR tree-optimization/39839 + * gcc.target/arm/pr39839.c: New test case. + 2010-07-22 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/unchecked_convert5b.adb: New test. diff --git a/gcc/testsuite/gcc.target/arm/pr39839.c b/gcc/testsuite/gcc.target/arm/pr39839.c new file mode 100644 index 0000000000000000000000000000000000000000..31e865af2f553cb1609520406441f48a81fcc4c1 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr39839.c @@ -0,0 +1,24 @@ +/* { dg-options "-mthumb -Os -march=armv5te -mthumb-interwork -fpic" } */ +/* { dg-require-effective-target arm_thumb1_ok } */ +/* { dg-final { scan-assembler-not "str\[\\t \]*r.,\[\\t \]*.sp," } } */ + +struct S +{ + int count; + char *addr; +}; + +void func(const char*, const char*, int, const char*); + +/* This function should not need to spill to the stack. */ +void test(struct S *p) +{ + int off = p->count; + while (p->count >= 0) + { + const char *s = "xyz"; + if (*p->addr) s = "pqr"; + func("abcde", p->addr + off, off, s); + p->count--; + } +}