1 /* { dg-require-effective-target label_values } */
2 
3 short optab[5];
4 char buf[10];
execute(ip)5 execute (ip)
6      register short *ip;
7 {
8   register void *base = &&x;
9   char *bp = buf;
10   static void *tab[] = {&&x, &&y, &&z};
11   if (ip == 0)
12     {
13       int i;
14       for (i = 0; i < 3; ++i)
15 	optab[i] = (short)(tab[i] - base);
16       return;
17     }
18 x:  *bp++='x';
19     goto *(base + *ip++);
20 y:  *bp++='y';
21     goto *(base + *ip++);
22 z:  *bp++='z';
23     *bp=0;
24     return;
25 }
26 
27 short p[5];
28 
main()29 main ()
30 {
31   execute ((short *) 0);
32   p[0] = optab[1];
33   p[1] = optab[0];
34   p[2] = optab[1];
35   p[3] = optab[2];
36   execute (&p);
37   if (strcmp (buf, "xyxyz"))
38     abort ();
39   exit (0);
40 }
41