1extern void abort();
2
3typedef union {
4       struct {
5  unsigned int hi;
6  unsigned int lo;
7 } i;
8       double d;
9} hexdouble;
10
11static const double twoTo52 = 0x1.0p+52;
12
13void func ( double x )
14{
15      hexdouble argument;
16      register double y, z;
17      unsigned int xHead;
18      argument.d = x;
19      xHead = argument.i.hi & 0x7fffffff;
20      if (__builtin_expect(!!(xHead < 0x43300000u), 1))
21       {
22                  y = ( x - twoTo52 ) + twoTo52;
23                  if ( y != x )
24		    abort();
25                  z = x - 0.5;
26                  y = ( z - twoTo52 ) + twoTo52;
27                  if ( y == (( x - twoTo52 ) + twoTo52) )
28		    abort();
29       }
30     return;
31}
32
33int main()
34{
35	if (sizeof (double) == 4)
36		return 0;
37	func((double)1.00);
38	return 0;
39}
40