1 /* { dg-require-effective-target indirect_jumps } */ 2 /* { dg-require-effective-target alloca } */ 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)12sub2 (void) 13 { 14 __builtin_longjmp (buf, 1); 15 } 16 17 int main()18main () 19 { 20 char *p = (char *) __builtin_alloca (20); 21 22 strcpy (p, "test"); 23 24 if (__builtin_setjmp (buf)) 25 { 26 if (strcmp (p, "test") != 0) 27 abort (); 28 29 exit (0); 30 } 31 32 { 33 int *q = (int *) __builtin_alloca (p[2] * sizeof (int)); 34 int i; 35 36 for (i = 0; i < p[2]; i++) 37 q[i] = 0; 38 39 while (1) 40 sub2 (); 41 } 42 } 43