/* { dg-do compile } */
/* { dg-additional-options "-w" } */

int **dp;
int sg;

void
z9(void)
{
  int pz, oi, vz, yp, zi, hd, pw, gr, w9 = 0, j0 = -1, rb = &w9;
  int *lr;
  while (w9 < 1) {
      lr++;
      *lr = 1;
      if (*lr < 1)
	for (;;)
	  if (pz && *lr) {
ee:
	      **dp = 0;
	  }
      pz = zi = vz;
      if (j0 ^ (vz > 0))
	continue;
      **dp = 1;
      while (**dp)
	if (++oi) {
	    int mq = dp;
	    j0 = 1;
	    while (pw < 1) {
		if (++rb && mq)
		  xq:
		      hd = sg;
		++pw;
	    }
	    sg = 0;
	    while (!sg) {
		goto ee;
		while (++yp && gr++) {
		    int i9, xa;
		    while (++i9 && ++xa)
		      fb:
			  ;
		}
	    }
	}
  }
  ++vz;
  if (zi > hd)
    goto xq;
  goto fb;
}
