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 Jun 9
> 12:23:34 PDT 2003
> 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 -Wconversion.
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 promoted
from char/bool to int before being passed to the function. With the prototype
in scope it is not promoted. Different argument widths so warning delivered.
Malcolm
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306101825.33674.malcolm.kay>
