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