modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/20041214-1.c (about) 1 /* { dg-require-effective-target indirect_jumps } */ 2 3 typedef long unsigned int size_t; 4 extern void abort (void); 5 extern char *strcpy (char *, const char *); 6 extern int strcmp (const char *, const char *); 7 typedef __builtin_va_list va_list; 8 static const char null[] = "(null)"; 9 int g (char *s, const char *format, va_list ap) 10 { 11 const char *f; 12 const char *string; 13 char spec; 14 static const void *step0_jumps[] = { 15 &&do_precision, 16 &&do_form_integer, 17 &&do_form_string, 18 }; 19 f = format; 20 if (*f == '\0') 21 goto all_done; 22 do 23 { 24 spec = (*++f); 25 goto *(step0_jumps[2]); 26 27 /* begin switch table. */ 28 do_precision: 29 ++f; 30 __builtin_va_arg (ap, int); 31 spec = *f; 32 goto *(step0_jumps[2]); 33 34 do_form_integer: 35 __builtin_va_arg (ap, unsigned long int); 36 goto end; 37 38 do_form_string: 39 string = __builtin_va_arg (ap, const char *); 40 strcpy (s, string); 41 42 /* End of switch table. */ 43 end: 44 ++f; 45 } 46 while (*f != '\0'); 47 48 all_done: 49 return 0; 50 } 51 52 void 53 f (char *s, const char *f, ...) 54 { 55 va_list ap; 56 __builtin_va_start (ap, f); 57 g (s, f, ap); 58 __builtin_va_end (ap); 59 } 60 61 int 62 main (void) 63 { 64 char buf[10]; 65 f (buf, "%s", "asdf", 0); 66 if (strcmp (buf, "asdf")) 67 abort (); 68 return 0; 69 } 70