1107665Simp/* { dg-options "-O2" } */
2209583Simp/* { dg-additional-sources pr64291-2.c } */
3107665Simp/* { dg-do run { target lp64 } } */
4107665Simpvoid f(void*,...);
5107665Simpvoid g(void*,long,long);
6107665Simpint nnn=0;
7107665Simplong test=0;
8107665Simp
9107665Simptypedef struct
10107665Simp{
11107665Simp  int _mp_size;
12107665Simp  unsigned long *_mp_d;
13107665Simp} __mpz_struct;
14107665Simptypedef __mpz_struct mpz_t[1];
15107665Simpvoid h(mpz_t);
16107665Simp
17107665Simpint main ()
18107665Simp{
19107665Simp  mpz_t n, d;
20107665Simp  long nn, dn;
21107665Simp  unsigned long *np, *dup, *dnp, *qp;
22107665Simp  long alloc, itch;
23107665Simp
24107665Simp  f (n);
25209583Simp  h (d);
26209583Simp  qp = (unsigned long*)__builtin_alloca(4099*8) + 1;
27209583Simp  dnp = (unsigned long*)__builtin_alloca (2049*8);
28209583Simp  alloc = 1;
29209583Simp  for (test = 0; test < 1; test++)
30209583Simp    {
31209583Simp      dn = d->_mp_size;
32209583Simp      dup = d->_mp_d;
33209583Simp      f (dnp, dup, dn);
34209583Simp      dnp[dn - 1] |= 1UL<<63;
35209583Simp      f (0);
36209583Simp      nn = nnn;
37209583Simp      np = n->_mp_d;
38209583Simp      qp[-1] = -757136820;
39209583Simp      qp[nn - dn + 1] = 14883681;
40209583Simp      f (0);
41209583Simp      if (dn >= 6)
42209583Simp	f (0);
43209583Simp      itch = nn + 1;
44209583Simp      if (itch + 1> alloc)
45209583Simp	{
46209583Simp	  g(0,alloc*8,(itch+1)*8);
47209583Simp	  alloc = itch + 1;
48209583Simp	}
49209583Simp      f (np, nn);
50209583Simp    }
51209583Simp  return 0;
52209583Simp}
53209583Simp