| /* { 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); |
| } |