/* { dg-do compile } */
/* { dg-require-effective-target indirect_jumps } */
/* { dg-require-effective-target label_values } */

typedef __INTPTR_TYPE__ intptr_t;
intptr_t a, b, c, d;
int foo (void) { return 0; }
int baz (void);

void
bar (void)
{
  intptr_t g = (intptr_t) &&h;
  void *i = &&j, *k = &&l;
j:
  if (baz ())
    {
      intptr_t **n = (intptr_t **) &a;
l:
      b = 0;
      for (; b >= 0;)
	goto *k;
h:
      **n = 0;
      for (;;)
	{
	  intptr_t *o = &c;
	  g = foo ();
	  *o = g;
	  if (c)
	    goto *(void*)d;
	}
    }
  goto *i;
}