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))
sub2(void)12 sub2 (void)
13 {
14   __builtin_longjmp (buf, 1);
15 }
16 
17 int
main()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 }
45