summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/950922-1.c
blob: 73c52f7740a17c6bd6de569f5f47f542ca520090 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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:;
}