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  }