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