1 /* { dg-options "-mtune=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
2 
3 extern void abort (void);
4 extern void exit (int);
5 
baz1(void * a)6 long baz1 (void *a)
7 {
8   static long l;
9   return l++;
10 }
11 
baz2(const char * a)12 int baz2 (const char *a)
13 {
14   return 0;
15 }
16 
baz3(int i)17 int baz3 (int i)
18 {
19   if (!i)
20     abort ();
21   return 1;
22 }
23 
24 void **bar;
25 
foo(void * a,long b,int c)26 int 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 
main()63 int main ()
64 {
65   void *n = 0;
66   bar = &n;
67   foo (&n, 1, 0xc811);
68   exit (0);
69 }
70