(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
920726-1.c
       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  }