1  /* { dg-do run } */
       2  /* { dg-require-effective-target indirect_jumps } */
       3  
       4  extern int strcmp(const char *, const char *);
       5  extern char *strcpy(char *, const char *);
       6  extern void abort(void);
       7  extern void exit(int);
       8  
       9  void *buf[20];
      10  
      11  void __attribute__((noinline))
      12  sub2 (void)
      13  {
      14    __builtin_longjmp (buf, 1);
      15  }
      16  
      17  int
      18  main ()
      19  {
      20    char *p = 0;
      21    
      22    p = (char *) __builtin_alloca (20);
      23  
      24    strcpy (p, "test");
      25  
      26    if (__builtin_setjmp (buf))
      27      {
      28        if (strcmp (p, "test") != 0)
      29  	abort ();
      30  
      31        exit (0);
      32      }
      33  
      34    {
      35      int *q = (int *) __builtin_alloca (p[2] * sizeof (int));
      36      int i;
      37      
      38      for (i = 0; i < p[2]; i++)
      39        q[i] = 0;
      40  
      41      while (1)
      42        sub2 ();
      43    }
      44  }