1  /* { dg-do run } */
       2  /* { dg-additional-options "-fstrict-overflow" } */
       3  
       4  extern void abort (void);
       5  
       6  int a, b, c, d, e, f, g, h = 1, i;
       7  
       8  int foo (int p)
       9  {
      10    return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
      11  }
      12  
      13  int *bar ()
      14  {
      15    int j; 
      16    i = h ? 0 : 1 % h;
      17    for (j = 0; j < 1; j++)
      18      for (d = 0; d; d++)
      19        for (e = 1; e;)
      20  	return 0;
      21    return 0;
      22  }
      23  
      24  int baz ()
      25  {
      26    for (; b >= 0; b--)
      27      for (c = 1; c >= 0; c--)
      28        {
      29  	int *k = &c;
      30  	for (;;)
      31  	  {
      32  	    for (f = 0; f < 1; f++)
      33  	      {
      34  		g = foo (*k);
      35  		bar ();
      36  	      }
      37  	    if (*k)
      38  	      break;
      39  	    return 0;
      40  	  }
      41        }
      42    return 0;
      43  }
      44  
      45  int main ()
      46  {
      47    baz ();
      48    if (b != 0)
      49      abort ();
      50    return 0;
      51  }