| /* { dg-additional-options "-std=gnu89" } */ | 
 |  | 
 | struct sw { | 
 |   const void *x; | 
 |   int r; | 
 | }; | 
 | struct sq { | 
 |   struct sw *q_w; | 
 |   int t; | 
 |   int z; | 
 | }; | 
 |  | 
 | int | 
 | f (int ch, char *fp, char *ap) | 
 | { | 
 |   register int n; | 
 |   register char *cp; | 
 |   register struct sw *p; | 
 |   register int f; | 
 |   int prec; | 
 |   double _double; | 
 |   int expt; | 
 |   int ndig; | 
 |   char expstr[7]; | 
 |   unsigned long long _uquad; | 
 |   struct sq q; | 
 |   struct sw w[8]; | 
 |   static char zeroes[16]; | 
 |  | 
 |   for (;;) { | 
 |     switch (ch) { | 
 |     case 'd': | 
 |       _double = (double) (ap += 8, *((double *) (ap - 8))); | 
 |       break; | 
 |     case 'o': | 
 |       goto nosign; | 
 |     case 'u': | 
 |       _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4)))); | 
 |       goto nosign; | 
 |     case 'x': | 
 |       _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(unsigned short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4)))); | 
 |     nosign: | 
 |       if (_uquad != 0 || prec != 0); | 
 |       break; | 
 |     default:; | 
 |     } | 
 |     if ((f & 0x100) == 0) { | 
 |     } else { | 
 |       if (ch >= 'f') { | 
 | 	if (_double == 0) { | 
 | 	  if (expt < ndig || (f & 0x001) != 0) { | 
 | 	    { if ((n = (ndig - 1)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}}} | 
 | 	  } | 
 | 	} else if (expt <= 0) { | 
 | 	  { p->x = ("0"); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} | 
 | 	  { p->x = 0; p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} | 
 | 	  { if ((n = (-expt)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} }} | 
 | 	  { p->x = cp; p->r = ndig; q.z += ndig; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} | 
 | 	} else { | 
 | 	  { p->x = cp; p->r = expt; q.z += expt; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} | 
 | 	  cp += expt; | 
 | 	  { p->x = ("."); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} | 
 | 	  { p->x = cp; p->r = (ndig-expt); q.z += (ndig-expt); p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} | 
 | 	} | 
 |       } | 
 |     } | 
 |   } | 
 |  | 
 |  error:; | 
 | } |