111
|
1 /* This code used to crash fold_convert due to PRE
|
|
2 wanting to fold_convert from a REAL_TYPE to an INTEGER_TYPE. */
|
|
3 typedef unsigned int uint32_t;
|
|
4 union double_union
|
|
5 {
|
|
6 double d;
|
|
7 uint32_t i[2];
|
|
8 };
|
|
9 struct _Jv_reent
|
|
10 {
|
|
11 int _errno;
|
|
12 };
|
|
13 _Jv_strtod_r (struct _Jv_reent *ptr, char **se)
|
|
14 {
|
|
15 int bb2, sign;
|
|
16 double aadj, aadj1, adj;
|
|
17 unsigned long y, z;
|
|
18 union double_union rv, *bs = ((void *) 0), *delta = ((void *) 0);
|
|
19 {
|
|
20 ovfl:ptr->_errno = 34;
|
|
21 {
|
|
22 (((uint32_t) 0xfffffL) | ((uint32_t) 0x100000L) * (1024 + 1023 - 1));
|
|
23 }
|
|
24 if ((aadj = _Jv_ratio (delta, bs)) <= 2.)
|
|
25 {
|
|
26 {
|
|
27 if (aadj < 2. / 2)
|
|
28 aadj = 1. / 2;
|
|
29 aadj1 = -aadj;
|
|
30 }
|
|
31 }
|
|
32 {
|
|
33 (rv.i[1]) -= 53 * ((uint32_t) 0x100000L);
|
|
34 adj = aadj1 * _Jv_ulp (rv.d);
|
|
35 rv.d += adj;
|
|
36 if (((rv.i[1]) & ((uint32_t) 0x7ff00000L)) >=
|
|
37 ((uint32_t) 0x100000L) * (1024 + 1023 - 53))
|
|
38 {
|
|
39 goto ovfl;
|
|
40 }
|
|
41 }
|
|
42 }
|
|
43 }
|