Skip site navigation (1)Skip section navigation (2)
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>