/* PR debug/45259 */
/* { dg-do compile } */
/* { dg-options "-g -O2 -w -fpic" { target fpic } } */
/* { dg-options "-g -O2 -w" { target { ! fpic } } } */
/* { dg-require-effective-target indirect_jumps } */
/* { dg-require-effective-target label_values } */

struct S { void (*bar) (long); };
struct T { struct S *t; };
int w;
extern int baz (int);

void
foo (int x, int u, char *z)
{
  struct T *v;
  static void *y[256] = { &&l1, &&l2 };
  for (;;)
    switch (x)
      {
      l2:
	x = 9;
      case 9:
	goto *y[*z++];
      case 10:
      case 27:
      case 54:
      case 99:
      case 100:
      case 120:
      case 122:
      case 131:
      case 132:
      case 134:
      case 141:
      case 142:
	v->t->bar (u);
	v->t->bar (u);
      case 143:
	continue;
      l1:
      default:
	baz (w);
      }
}
