I'll attach a short sample file that works nicely on 32 bit architectures but
breaks on AMD64. A function taking varargs calls va_start and passes that
va_list object to another function. This one will output it twice with vprintf.
Between the two calls to vprintf there's another function call. The second call
to vprint produces wrong output, e.g.
::mxmsg(1) string honk int 42 string cow!
::mxmsg(2) string int 1697834872 string
The same code produces correct output on 32bit platforms.
--
Summary: va_list passed to a function gets messed up by a call to
another function
Product: gcc
Version: 3.4.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: moritz at bunkus dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: x86_64-redhat-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20916