delorie.com/archives/browse.cgi | search |
Message-ID: | <3EA26C19.81D82449@acm.org> |
From: | Eric Sosman <esosman AT acm DOT org> |
X-Mailer: | Mozilla 4.72 [en] (Win95; U) |
X-Accept-Language: | en |
MIME-Version: | 1.0 |
Newsgroups: | comp.os.msdos.djgpp |
Subject: | Re: __builtin_va_list bug? |
References: | <0ab801c306bf$4dacb430$0600000a AT broadpark DOT no> |
Lines: | 26 |
Date: | Sun, 20 Apr 2003 14:44:30 GMT |
NNTP-Posting-Host: | 12.91.3.234 |
X-Complaints-To: | abuse AT worldnet DOT att DOT net |
X-Trace: | bgtnsc05-news.ops.worldnet.att.net 1050849870 12.91.3.234 (Sun, 20 Apr 2003 14:44:30 GMT) |
NNTP-Posting-Date: | Sun, 20 Apr 2003 14:44:30 GMT |
Organization: | AT&T Worldnet |
To: | djgpp AT delorie DOT com |
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
Reply-To: | djgpp AT delorie DOT com |
Gisle Vanem wrote: > > I'm porting some code from Watcom to gcc/djgpp and encountered > tons of warnings on illegal use of va_arg(). So I cooked up a little > test: > > #include <stdarg.h> > char x; > void foo (va_list arg) Hold on; stop right there. You've included <stdarg.h>, but you're using the argument list declaration from the pre-Standard <varargs.h> (or <vararg.h> with some compilers). The two are not the same, they are not interchangeable, and they are *definitely* not miscible. > x = va_arg (arg, char); This will be wrong with either <stdarg.h> or <varargs.h>, since the actual type of the parameter is not `char' but whatever `char' gets promoted to: `int' on most machines, but perhaps `unsigned int' on some oddball architectures. You must specify the promoted type, not the type to which you will later "demote" it. -- Eric Sosman esosman AT acm DOT org
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |