/* Test Gcov with computed gotos.
   This is the same as test gcc.c-torture/execute/980526-1.c */

/* { dg-options "-fprofile-arcs -ftest-coverage" } */
/* { dg-do run { target native } } */

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){			/* count(1) */
#ifndef NO_LABEL_VALUES
  do1();
  do2();
#endif
  exit(0);			/* count(1) */
}

/* { dg-final { run-gcov gcov-3.c } } */
