1 /* Same test as built-in-setjmp.c. Includes the case where 2 the source block of a crossing fallthru edge ends with a call. */ 3 /* { dg-require-effective-target freorder } */ 4 /* { dg-options "-O2 -freorder-blocks-and-partition" } */ 5 6 extern int strcmp(const char *, const char *); 7 extern char *strcpy(char *, const char *); 8 extern void abort(void); 9 extern void exit(int); 10 11 void *buf[20]; 12 13 void __attribute__((noinline)) sub2(void)14sub2 (void) 15 { 16 __builtin_longjmp (buf, 1); 17 } 18 19 int main()20main () 21 { 22 char *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 46