modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c (about)

     1  /* On the i960 any arg bigger than 16 bytes causes all subsequent args
     2     to be passed on the stack.  We test this.  */
     3  
     4  #include <stdarg.h>
     5  
     6  typedef struct {
     7    char a[32];
     8  } big;
     9  
    10  void
    11  f (big x, char *s, ...)
    12  {
    13    va_list ap;
    14  
    15    if (x.a[0] != 'a' || x.a[1] != 'b' || x.a[2] != 'c')
    16      abort ();
    17    va_start (ap, s);
    18    if (va_arg (ap, int) != 42)
    19      abort ();
    20    if (va_arg (ap, int) != 'x')
    21      abort ();
    22    if (va_arg (ap, int) != 0)
    23      abort ();
    24    va_end (ap);
    25  }
    26  
    27  main ()
    28  {
    29    static big x = { "abc" };
    30  
    31    f (x, "", 42, 'x', 0);
    32    exit (0);
    33  }