diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 83ecfe9d2ff..ffd5917ad6f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-02-01 Hans-Peter Nilsson + + PR rtl-optimization/34773 + * gcc.target/cris/torture/pr34773.c: New test. + 2008-02-01 Nick Clifton * lib/target-supports.exp (check_profiling_available): Do not diff --git a/gcc/testsuite/gcc.target/cris/torture/pr34773.c b/gcc/testsuite/gcc.target/cris/torture/pr34773.c new file mode 100644 index 00000000000..4912611b853 --- /dev/null +++ b/gcc/testsuite/gcc.target/cris/torture/pr34773.c @@ -0,0 +1,74 @@ +/* { dg-do run } */ +union double_union +{ + double d; + int i[2]; +}; +void _dtoa_r (double) __attribute__ ((__noinline__)); +void _vfprintf_r (double) __attribute__ ((__noinline__)); +void +__sprint_r(int); +void +_vfprintf_r(double da) +{ + double ffp = da; + double value = ffp; + union double_union tmp; + + tmp.d = value; + + if ((tmp.i[1]) & ((unsigned)0x80000000L)) { + value = -value; + } + + _dtoa_r (value); + + if (ffp != 0) + __sprint_r(value == 0); + asm (""); +} + + +double dd = -.012; +double ff = .012; + +void exit (int) __attribute__ ((__noreturn__)); +void abort (void) __attribute__ ((__noreturn__)); +void *memset(void *s, int c, __SIZE_TYPE__ n); +void _dtoa_r (double d) +{ + if (d != ff) + abort (); + asm (""); +} + +void __sprint_r (int i) +{ + if (i != 0) + abort (); + asm (""); +} + +int clearstack (void) __attribute__ ((__noinline__)); +int clearstack (void) +{ + char doodle[128]; + memset (doodle, 0, sizeof doodle); + asm volatile ("" : : "g" (doodle) : "memory"); + return doodle[127]; +} + +void doit (void) __attribute__ ((__noinline__)); +void doit (void) +{ + _vfprintf_r (dd); + _vfprintf_r (ff); + asm (""); +} + +int main(void) +{ + clearstack (); + doit (); + exit (0); +}