This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
C++ bug: va_arg & aggr type
- To: egcs-bugs at egcs dot cygnus dot com
- Subject: C++ bug: va_arg & aggr type
- From: Nathan Sidwell <nathan at acm dot org>
- Date: Mon, 04 Oct 1999 15:57:57 +0100
- Reply-To: nathan at compsci dot bristol dot ac dot uk
Hi,
The current CVS rejects va_arg applied to an aggregate type.
--snip
#include <stdarg.h>
struct X {int m;};
void fn1(va_list args)
{
int i = va_arg (args, int);
X x = va_arg (args, X);
}
--snip
I get,
nathan@manao:611>/local/nathan/devel/bin/devel-gcc -c -ansi -pedantic foo.cc -v
Reading specs from /local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/specs
gcc version 2.96 19991004 (experimental)
/local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=96 -D__cplusplus -trigraphs -D__STRICT_ANSI__ -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__EXCEPTIONS -pedantic -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) foo.cc /var/tmp/ccGe2Joj.ii
GNU CPP version 2.96 19991004 (experimental) (sparc)
#include "..." search starts here:
#include <...> search starts here:
/local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/../../../../include/g++-3
/local/nathan/devel/include
/local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/../../../../sparc-sun-solaris2.6/include
/local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
/local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/cc1plus /var/tmp/ccGe2Joj.ii -quiet -dumpbase foo.cc -pedantic -ansi -version -o /var/tmp/ccCwgr9v.s
GNU C++ version 2.96 19991004 (experimental) (sparc-sun-solaris2.6) compiled by GNU C version 2.95 19990728 (release).
foo.cc: In function `void fn1 (void *)':
foo.cc:8: non-lvalue in unary `&'
I attach the preprocessed source.
I can't see anything in the standard banning va_args on structs. This is a regression
from the 2.95 release. I'll install this as an XFAILING test case, if that's ok?
nathan
--
Dr Nathan Sidwell :: Computer Science Department :: Bristol University
I have seen the death of PhotoShop -- it is called GIMP
nathan@acm.org http://www.cs.bris.ac.uk/~nathan/ nathan@cs.bris.ac.uk
# 1 "foo.cc"
# 1 "/local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/include/stdarg.h" 1 3 4
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
# 124 "/local/nathan/devel/lib/gcc-lib/sparc-sun-solaris2.6/2.96/include/stdarg.h" 3 4
# 1 "foo.cc" 2
struct X {int m;};
void fn1(va_list args)
{
int i = __builtin_va_arg (args, int);
X x = __builtin_va_arg (args, X);
}