1 extern void abort (void);
2
3 union _D_rep
4 {
5 unsigned short rep[4];
6 double val;
7 };
8
add(double * key,double * table)9 int add(double* key, double* table)
10 {
11 unsigned i = 0;
12 double* deletedEntry = 0;
13 while (1) {
14 double* entry = table + i;
15
16 if (*entry == *key)
17 break;
18
19 union _D_rep _D_inf = {{ 0, 0, 0, 0x7ff0 }};
20 if (*entry != _D_inf.val)
21 abort ();
22
23 union _D_rep _D_inf2 = {{ 0, 0, 0, 0x7ff0 }};
24 if (!_D_inf2.val)
25 deletedEntry = entry;
26
27 i++;
28 }
29 if (deletedEntry)
30 *deletedEntry = 0.0;
31 return 0;
32 }
33
main()34 int main ()
35 {
36 union _D_rep infinit = {{ 0, 0, 0, 0x7ff0 }};
37 double table[2] = { infinit.val, 23 };
38 double key = 23;
39 int ret = add (&key, table);
40 return ret;
41 }
42