/* { dg-options "-O2" } */ /* { dg-additional-sources pr64291-2.c } */ /* { dg-do run { target lp64 } } */ void f(void*,...); void g(void*,long,long); int nnn=0; long test=0; typedef struct { int _mp_size; unsigned long *_mp_d; } __mpz_struct; typedef __mpz_struct mpz_t[1]; void h(mpz_t); int main () { mpz_t n, d; long nn, dn; unsigned long *np, *dup, *dnp, *qp; long alloc, itch; f (n); h (d); qp = (unsigned long*)__builtin_alloca(4099*8) + 1; dnp = (unsigned long*)__builtin_alloca (2049*8); alloc = 1; for (test = 0; test < 1; test++) { dn = d->_mp_size; dup = d->_mp_d; f (dnp, dup, dn); dnp[dn - 1] |= 1UL<<63; f (0); nn = nnn; np = n->_mp_d; qp[-1] = -757136820; qp[nn - dn + 1] = 14883681; f (0); if (dn >= 6) f (0); itch = nn + 1; if (itch + 1> alloc) { g(0,alloc*8,(itch+1)*8); alloc = itch + 1; } f (np, nn); } return 0; }