When compiling the source below, gcc produces the warnings x.cc:8: warning: second parameter of `va_start' not last named argument x.cc:8: warning: second parameter of `va_start' not last named argument which is at best misleading, as the second argument of va_start actually is the last named argument. gcc appears to give this warning in this case if the argument is also passed by reference somewhere in the function, as it is here in the call to bar(). I don't have my copy of the standard handy, so i'm not completely sure that there isn't a restriction about taking a reference to an argument used in va_start. However, even if this test case is actually not valid, the warning message should be changed to reflect the true problem. Environment: System: Linux karma 2.6.6 #15 Thu May 13 15:07:54 EDT 2004 i686 i686 i386 GNU/Linux Architecture: i686 <machine, os, target, libraries (multiple lines)> host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: /home/sss/gcc/gcc/configure --prefix=/usr/local/gcc --enable-threads=posix --enable-long-long --enable-languages=c,c++,f95 How-To-Repeat: Compile the following: ---------------------------- #include <cstdarg> void bar(const int&); void foo (int x, ...) { va_list ap; va_start (ap, x); bar(x); } ----------------------------
Fix: <how to correct or work around the problem, if known (multiple lines)>
Confirmed. Here is another example (but this time in C): #include <stdarg.h> void bar(int*); void foo (int x, ...) { va_list ap; va_start (ap, x); bar(&x); } Note this causes wrong code.
No this is valid code, the problem is that the front-end marks the decl (x) as TREE_ADDRESSABLE, so when the gimplify comes along it loads the decl into another tempary decl which causes this warning but this also causes wrong code too.
Note this also the reason why gcc.dg/altivec-varargs-1.c fails on powerpc-apple-darwin.
Jason do you want to look at this one, it is related to gimplifing __builtin_va_start
*** Bug 16041 has been marked as a duplicate of this bug. ***
Subject: Bug 15885 CVSROOT: /cvs/gcc Module name: gcc Changes by: jason@gcc.gnu.org 2004-07-15 21:50:51 Modified files: gcc : ChangeLog gimplify.c gcc/cp : ChangeLog cp-lang.c Log message: * cp-lang.c (cxx_types_compatible_p): To the middle-end, references and pointers are compatible. PR middle-end/15885 * gimplify.c (gimplify_arg): New fn, split out from... (gimplify_call_expr): Here. Special-case BUILT_IN_VA_START. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.4550&r2=2.4551 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/gimplify.c.diff?cvsroot=gcc&r1=2.47&r2=2.48 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4204&r2=1.4205 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cp-lang.c.diff?cvsroot=gcc&r1=1.85&r2=1.86
Fixed.