https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14557
--- Comment #23 from nsz at gcc dot gnu.org --- (In reply to felix from comment #21) > > va_list ap2; > > va_copy(ap2, ap); > > > and then use &ap2, this always works. > > > the proposed macros are both broken and unnecessary. > > That's not equivalent. Using va_arg(ap2, T) does not propagate state changes > back to ap, which is the main motivation to form a pointer to ap in the > first place. The macros do that just fine. You mean they are unportable? > That part is true, I admitted as much. Pick your poison. > state changes are propagated to ap2, which is what you should use after you made the copy, it does exactly what you want.