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