1  /* { dg-options "-O2" } */
       2  /* { dg-additional-sources pr64291-2.c } */
       3  /* { dg-do run { target lp64 } } */
       4  void f(void*,...);
       5  void g(void*,long,long);
       6  int nnn=0;
       7  long test=0;
       8  
       9  typedef struct
      10  {
      11    int _mp_size;
      12    unsigned long *_mp_d;
      13  } __mpz_struct;
      14  typedef __mpz_struct mpz_t[1];
      15  void h(mpz_t);
      16  
      17  int main ()
      18  {
      19    mpz_t n, d;
      20    long nn, dn;
      21    unsigned long *np, *dup, *dnp, *qp;
      22    long alloc, itch;
      23  
      24    f (n);
      25    h (d);
      26    qp = (unsigned long*)__builtin_alloca(4099*8) + 1;
      27    dnp = (unsigned long*)__builtin_alloca (2049*8) + 1;
      28    alloc = 1;
      29    for (test = 0; test < 1; test++)
      30      {
      31        dn = d->_mp_size;
      32        dup = d->_mp_d;
      33        f (dnp, dup, dn);
      34        dnp[dn - 1] |= 1UL<<63;
      35        f (0);
      36        nn = nnn;
      37        np = n->_mp_d;
      38        qp[-1] = -757136820;
      39        qp[nn - dn + 1] = 14883681;
      40        f (0);
      41        if (dn >= 6)
      42  	f (0);
      43        itch = nn + 1;
      44        if (itch + 1> alloc)
      45  	{
      46  	  g(0,alloc*8,(itch+1)*8);
      47  	  alloc = itch + 1;
      48  	}
      49        f (np, nn);
      50      }
      51    return 0;
      52  }