re PR rtl-optimization/34773 (miscompilation of vfprintf_r)

PR rtl-optimization/34773
	* gcc.target/cris/torture/pr34773.c: New test.

From-SVN: r132052
This commit is contained in:
Hans-Peter Nilsson 2008-02-01 21:28:06 +00:00 committed by Hans-Peter Nilsson
parent aa12a57303
commit 2449e8e5cd
2 changed files with 79 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2008-02-01 Hans-Peter Nilsson <hp@axis.com>
PR rtl-optimization/34773
* gcc.target/cris/torture/pr34773.c: New test.
2008-02-01 Nick Clifton <nickc@redhat.com>
* lib/target-supports.exp (check_profiling_available): Do not

View File

@ -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);
}