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

     1  /* This is a modfied version of va-arg-2.c to test passing a va_list as
     2     a parameter to another function.  */
     3  
     4  #include <stdarg.h>
     5  
     6  extern __SIZE_TYPE__ strlen (const char *);
     7  
     8  int
     9  to_hex (unsigned int a)
    10  {
    11    static char hex[] = "0123456789abcdef";
    12  
    13    if (a > 15)
    14      abort ();
    15    return hex[a];
    16  }
    17  
    18  void
    19  fap (int i, char* format, va_list ap)
    20  {
    21    if (strlen (format) != 16 - i)
    22      abort ();
    23    while (*format)
    24      if (*format++ != to_hex (va_arg (ap, int)))
    25        abort ();
    26  }
    27  
    28  void
    29  f0 (char* format, ...)
    30  {
    31    va_list ap;
    32  
    33    va_start (ap, format);
    34    fap(0, format, ap);
    35    va_end(ap);
    36  }
    37  
    38  void
    39  f1 (int a1, char* format, ...)
    40  {
    41    va_list ap;
    42  
    43    va_start(ap, format);
    44    fap(1, format, ap);
    45    va_end(ap);
    46  }
    47  
    48  void
    49  f2 (int a1, int a2, char* format, ...)
    50  {
    51    va_list ap;
    52  
    53    va_start(ap, format);
    54    fap(2, format, ap);
    55    va_end(ap);
    56  }
    57  
    58  void
    59  f3 (int a1, int a2, int a3, char* format, ...)
    60  {
    61    va_list ap;
    62  
    63    va_start(ap, format);
    64    fap(3, format, ap);
    65    va_end(ap);
    66  }
    67  
    68  void
    69  f4 (int a1, int a2, int a3, int a4, char* format, ...)
    70  {
    71    va_list ap;
    72  
    73    va_start(ap, format);
    74    fap(4, format, ap);
    75    va_end(ap);
    76  }
    77  
    78  void
    79  f5 (int a1, int a2, int a3, int a4, int a5,
    80      char* format, ...)
    81  {
    82    va_list ap;
    83  
    84    va_start(ap, format);
    85    fap(5, format, ap);
    86    va_end(ap);
    87  }
    88  
    89  void
    90  f6 (int a1, int a2, int a3, int a4, int a5,
    91      int a6,
    92      char* format, ...)
    93  {
    94    va_list ap;
    95  
    96    va_start(ap, format);
    97    fap(6, format, ap);
    98    va_end(ap);
    99  }
   100  
   101  void
   102  f7 (int a1, int a2, int a3, int a4, int a5,
   103      int a6, int a7,
   104      char* format, ...)
   105  {
   106    va_list ap;
   107  
   108    va_start(ap, format);
   109    fap(7, format, ap);
   110    va_end(ap);
   111  }
   112  
   113  void
   114  f8 (int a1, int a2, int a3, int a4, int a5,
   115      int a6, int a7, int a8,
   116      char* format, ...)
   117  {
   118    va_list ap;
   119  
   120    va_start(ap, format);
   121    fap(8, format, ap);
   122    va_end(ap);
   123  }
   124  
   125  void
   126  f9 (int a1, int a2, int a3, int a4, int a5,
   127      int a6, int a7, int a8, int a9,
   128      char* format, ...)
   129  {
   130    va_list ap;
   131  
   132    va_start(ap, format);
   133    fap(9, format, ap);
   134    va_end(ap);
   135  }
   136  
   137  void
   138  f10 (int a1, int a2, int a3, int a4, int a5,
   139       int a6, int a7, int a8, int a9, int a10,
   140       char* format, ...)
   141  {
   142    va_list ap;
   143  
   144    va_start(ap, format);
   145    fap(10, format, ap);
   146    va_end(ap);
   147  }
   148  
   149  void
   150  f11 (int a1, int a2, int a3, int a4, int a5,
   151       int a6, int a7, int a8, int a9, int a10,
   152       int a11,
   153       char* format, ...)
   154  {
   155    va_list ap;
   156  
   157    va_start(ap, format);
   158    fap(11, format, ap);
   159    va_end(ap);
   160  }
   161  
   162  void
   163  f12 (int a1, int a2, int a3, int a4, int a5,
   164       int a6, int a7, int a8, int a9, int a10,
   165       int a11, int a12,
   166       char* format, ...)
   167  {
   168    va_list ap;
   169  
   170    va_start(ap, format);
   171    fap(12, format, ap);
   172    va_end(ap);
   173  }
   174  
   175  void
   176  f13 (int a1, int a2, int a3, int a4, int a5,
   177       int a6, int a7, int a8, int a9, int a10,
   178       int a11, int a12, int a13,
   179       char* format, ...)
   180  {
   181    va_list ap;
   182  
   183    va_start(ap, format);
   184    fap(13, format, ap);
   185    va_end(ap);
   186  }
   187  
   188  void
   189  f14 (int a1, int a2, int a3, int a4, int a5,
   190       int a6, int a7, int a8, int a9, int a10,
   191       int a11, int a12, int a13, int a14,
   192       char* format, ...)
   193  {
   194    va_list ap;
   195  
   196    va_start(ap, format);
   197    fap(14, format, ap);
   198    va_end(ap);
   199  }
   200  
   201  void
   202  f15 (int a1, int a2, int a3, int a4, int a5,
   203       int a6, int a7, int a8, int a9, int a10,
   204       int a11, int a12, int a13, int a14, int a15,
   205       char* format, ...)
   206  {
   207    va_list ap;
   208  
   209    va_start(ap, format);
   210    fap(15, format, ap);
   211    va_end(ap);
   212  }
   213  
   214  main ()
   215  {
   216    char *f = "0123456789abcdef";
   217  
   218    f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   219    f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   220    f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   221    f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   222    f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   223    f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   224    f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   225    f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
   226    f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15);
   227    f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15);
   228    f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15);
   229    f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15);
   230    f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15);
   231    f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15);
   232    f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15);
   233    f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15);
   234  
   235    exit (0);
   236  }