1extern void abort (void);
2
3union _D_rep
4{
5  unsigned short rep[4];
6  double val;
7};
8
9int 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
34int 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