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