1  /* { dg-do run } */
       2  /* { dg-require-effective-target label_values } */
       3  /* { dg-require-effective-target trampolines } */
       4  /* { dg-add-options stack_size } */
       5  
       6  #ifdef STACK_SIZE
       7  #define DEPTH ((STACK_SIZE) / 512 + 1)
       8  #else
       9  #define DEPTH 1000
      10  #endif
      11  
      12  extern void abort (void);
      13  extern void exit (int);
      14  
      15  int
      16  x(int a)
      17  {
      18    __label__ xlab;
      19    void y(int a)
      20      {
      21        void *x = &&llab;
      22        if (a==-1)
      23  	goto *x;
      24        if (a==0)
      25  	goto xlab;
      26      llab:
      27        y (a-1);
      28      }
      29    y (a);
      30   xlab:;
      31    return a;
      32  }
      33  
      34  int
      35  main ()
      36  {
      37    if (x (DEPTH) != DEPTH)
      38      abort ();
      39  
      40    exit (0);
      41  }