modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/920726-1.c (about) 1 #include <stdio.h> 2 #include <stdarg.h> 3 4 struct spurious 5 { 6 int anumber; 7 }; 8 9 int first(char *buf, char *fmt, ...) 10 { 11 int pos, number; 12 va_list args; 13 int dummy; 14 char *bp = buf; 15 16 va_start(args, fmt); 17 for (pos = 0; fmt[pos]; pos++) 18 if (fmt[pos] == 'i') 19 { 20 number = va_arg(args, int); 21 sprintf(bp, "%d", number); 22 bp += strlen(bp); 23 } 24 else 25 *bp++ = fmt[pos]; 26 27 va_end(args); 28 *bp = 0; 29 return dummy; 30 } 31 32 struct spurious second(char *buf,char *fmt, ...) 33 { 34 int pos, number; 35 va_list args; 36 struct spurious dummy; 37 char *bp = buf; 38 39 va_start(args, fmt); 40 for (pos = 0; fmt[pos]; pos++) 41 if (fmt[pos] == 'i') 42 { 43 number = va_arg(args, int); 44 sprintf(bp, "%d", number); 45 bp += strlen(bp); 46 } 47 else 48 *bp++ = fmt[pos]; 49 50 va_end(args); 51 *bp = 0; 52 return dummy; 53 } 54 55 main() 56 { 57 char buf1[100], buf2[100]; 58 first(buf1, "i i ", 5, 20); 59 second(buf2, "i i ", 5, 20); 60 if (strcmp ("5 20 ", buf1) || strcmp ("5 20 ", buf2)) 61 abort(); 62 exit(0); 63 }