--- /dev/null
+#include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #define DO_VA_COPY(d,s) memcpy((void *)(d), (void *)(s)), sizeof(*(s))
+ void test(char *str, ...)
+ {
+ va_list ap, ap2;
+ int i;
+ va_start(ap, str);
+ DO_VA_COPY(ap2, ap);
+ for (i = 1; i <= 9; i++) {
+ int k = (int)va_arg(ap, int);
+ if (k != i)
+ abort();
+ }
+ DO_VA_COPY(ap, ap2);
+ for (i = 1; i <= 9; i++) {
+ int k = (int)va_arg(ap, int);
+ if (k != i)
+ abort();
+ }
+ va_end(ap);
+ }
+ int main(int argc, char *argv[])
+ {
+ test(test, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+ exit(0);
+ }