Date: Tue, 10 Jun 2003 18:25:33 +0930 From: Malcolm Kay <malcolm.kay@internode.on.net> To: Sean Chittenden <sean@chittenden.org>, questions@freebsd.org Subject: Re: gcc me harder: -Wconversion bug? Message-ID: <200306101825.33674.malcolm.kay@internode.on.net> In-Reply-To: <20030609230324.GL65470@perrin.int.nxad.com> References: <20030609230324.GL65470@perrin.int.nxad.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 10 Jun 2003 08:33, Sean Chittenden wrote: > [ Please CC: me on replies, not on questions@ ] > > Is this a GCC bug with the -Wconversion flag or am I doing something > wrong? I know it's just a warning, but it's irritating me more than > that dumb Dan Quayle quote, "if it weren't for that horse, I wouldn't > have spent an extra year in college..." -sc > > % gcc -v > Using built-in specs. > Configured with: FreeBSD/i386 system compiler > Thread model: posix > gcc version 3.2.2 [FreeBSD] 20030205 (release) > % uname -a > FreeBSD hostname.example.com 5.1-CURRENT FreeBSD 5.1-CURRENT #2: Mon Ju= n 9 > 12:23:34 PDT 2003 =20 > sean@hostname.example.com:/usr/src/sys/i386/compile/HOSTNAME i386 > > > % gcc -Wconversion test.c > test.c: In function `main': > test.c:5: warning: passing arg 1 of `f' with different width due to > prototype > > /* Begin test.h */ > #ifndef __TEST_H__ > #define __TEST_H__ > > #ifndef bool > typedef char bool; > #endif > > #ifndef true > #define true ((bool)1) > #endif > > #ifndef false > #define false ((bool)0) > #endif > > void f(bool b); > #endif > /* End test.h */ > > > /* Begin test.c */ > #include "test.h" > > int > main(void) { > f(true); > return(0); > } > > void > f(bool b) { } > /* End test.c */ It seems to me that this is doing exactly what is claimed for -Wconversio= n. To quote from the gcc man page: -Wconversion Warn if a prototype causes a type conversion that is different from what would happen to the same ar- gument in the absence of a prototype. ... Now in the absence of a prototype for f() the argument true would be prom= oted=20 from char/bool to int before being passed to the function. With the proto= type in scope it is not promoted. Different argument widths so warning deliver= ed. Malcolm
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306101825.33674.malcolm.kay>