1  /* { dg-do run } */
       2  /* { dg-require-effective-target indirect_jumps } */
       3  
       4  #include <setjmp.h>
       5  
       6  extern void abort (void);
       7  
       8  jmp_buf buf;
       9  
      10  void raise0(void)
      11  {
      12    __builtin_longjmp (buf, 1);
      13  }
      14  
      15  int execute(int cmd)
      16  {
      17    int last = 0;
      18  
      19    __builtin_setjmp (buf);
      20  
      21    if (last == 0)
      22      while (1)
      23        {
      24  	last = 1;
      25  	raise0 ();
      26        }
      27  
      28    if (last == 0)
      29      return 0;
      30    else
      31      return cmd;
      32  }
      33  
      34  int main(void)
      35  {
      36    if (execute (1) == 0)
      37      abort ();
      38  
      39    return 0;
      40  }