1#include <limits.h>
2
3void * a[255];
4
5f (m)
6{
7  int i;
8  int sh = 0x100;
9  i = m;
10  do
11    {
12      a[sh >>= 1] = ((unsigned)i << 3)  + (char*)a;
13      i += 4;
14    }
15  while (i < INT_MAX/2 + 1 + 4 * 4);
16}
17
18main ()
19{
20  a[0x10] = 0;
21  a[0x08] = 0;
22  f (INT_MAX/2 + INT_MAX/4 + 2);
23  if (a[0x10] || a[0x08])
24    abort ();
25  a[0x10] = 0;
26  a[0x08] = 0;
27  f (INT_MAX/2 + 1);
28  if (! a[0x10] || a[0x08])
29    abort ();
30  exit (0);
31}
32