1/* { dg-options "-mtune=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
2
3extern void abort (void);
4extern void exit (int);
5
6long baz1 (void *a)
7{
8  static long l;
9  return l++;
10}
11
12int baz2 (const char *a)
13{
14  return 0;
15}
16
17int baz3 (int i)
18{
19  if (!i)
20    abort ();
21  return 1;
22}
23
24void **bar;
25
26int foo (void *a, long b, int c)
27{
28  int d = 0, e, f = 0, i;
29  char g[256];
30  void **h;
31
32  g[0] = '\n';
33  g[1] = 0;
34
35  while (baz1 (a) < b) {
36    if (g[0] != ' ' && g[0] != '\t') {
37      f = 1;
38      e = 0;
39      if (!d && baz2 (g) == 0) {
40	if ((c & 0x10) == 0)
41	  continue;
42	e = d = 1;
43      }
44      if (!((c & 0x10) && (c & 0x4000) && e) && (c & 2))
45	continue;
46      if ((c & 0x2000) && baz2 (g) == 0)
47	continue;
48      if ((c & 0x1408) && baz2 (g) == 0)
49	continue;
50      if ((c & 0x200) && baz2 (g) == 0)
51	continue;
52      if (c & 0x80) {
53	for (h = bar, i = 0; h; h = (void **)*h, i++)
54	  if (baz3 (i))
55	    break;
56      }
57      f = 0;
58    }
59  }
60  return 0;
61}
62
63int main ()
64{
65  void *n = 0;
66  bar = &n;
67  foo (&n, 1, 0xc811);
68  exit (0);
69}
70