From: Hans-Peter Nilsson Date: Fri, 1 Feb 2008 21:28:06 +0000 (+0000) Subject: re PR rtl-optimization/34773 (miscompilation of vfprintf_r) X-Git-Tag: releases/gcc-4.3.0~300 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2449e8e5cdb140871c4368606cd3405a48103319;p=thirdparty%2Fgcc.git re PR rtl-optimization/34773 (miscompilation of vfprintf_r) PR rtl-optimization/34773 * gcc.target/cris/torture/pr34773.c: New test. From-SVN: r132052 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 83ecfe9d2ff8..ffd5917ad6f1 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 000000000000..4912611b853a --- /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); +}