/* Test profile-directed block ordering with computed gotos. * This is the same as test gcc.c-torture/execute/980526-1.c and gcc.misc-tests/gcov-3.c */ extern void abort (void); extern void exit (int); int expect_do1 = 1, expect_do2 = 2; static int doit(int x){ __label__ lbl1; __label__ lbl2; static int jtab_init = 0; static void *jtab[2]; if(!jtab_init) { jtab[0] = &&lbl1; jtab[1] = &&lbl2; jtab_init = 1; } goto *jtab[x]; lbl1: return 1; lbl2: return 2; } static void do1(void) { if (doit(0) != expect_do1) abort (); } static void do2(void){ if (doit(1) != expect_do2) abort (); } int main(void){ #ifndef NO_LABEL_VALUES do1(); do2(); #endif exit(0); }