summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/pr45259.c
blob: 3b8d6bd176db13ffe5a88d714f80e5ce8a11ad24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/* PR debug/45259 */
/* { dg-do compile } */
/* { dg-options "-g -O2 -w -fpic" { target fpic } } */
/* { dg-options "-g -O2 -w" { target { ! fpic } } } */

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);
      }
}