Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Jun 2003 09:09:00 +0930
From:      Malcolm Kay <malcolm.kay@internode.on.net>
To:        Sean Chittenden <sean@chittenden.org>
Cc:        questions@freebsd.org
Subject:   Re: gcc me harder: -Wconversion bug?
Message-ID:  <200306110909.00568.malcolm.kay@internode.on.net>
In-Reply-To: <20030610200041.GR65470@perrin.int.nxad.com>
References:  <20030609230324.GL65470@perrin.int.nxad.com> <200306101928.30765.malcolm.kay@internode.on.net> <20030610200041.GR65470@perrin.int.nxad.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 11 Jun 2003 05:30, Sean Chittenden wrote:
> > > > 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. Differe=
nt
> > > > argument widths so warning delivered.
> > >
> > > % cpp test.c
> > > # 1 "test7.c"
> > > # 1 "<built-in>"
> > > # 1 "<command line>"
> > > # 1 "test7.c"
> > > # 1 "test7.h" 1
> > > # 13 "test7.h"
> > > void f(char b);
> > > # 2 "test7.c" 2
> > >
> > > int
> > > main(int argc, char *argv[]) {
> > >   f((((char)1)));
> > >
> > >   return(0);
> > > }
> > >
> > > void
> > > f(char b) {
> > > }
> > >
> > > Am I missing something that says that there isn't the prototype of
> > > the same width?  Last time I checked my vision, f(char b) was the
> > > same as f(char b)...  :-/ or am I missing something?  I believe
> > > that gcc's promoting the char to an int or to some other non-1
> > > byte width data type... but I'm not seeing how, where, or why.
> > > -sc
> >
> > According to the man page we are comaring what does happen with the
> > prototype in scope with what would have happened if the prototype
> > was not there.
> >
> > You are aware theat the rules of C require that in the absence of a
> > prototype actual integer calling arguments of less width than int
> > (usually char and short) must be promoted to int before the call?
>
> Wow, that's a really worthless warning.  I had to re-read it in the AM
> to fully appreciate its non-usefulness for properly written software.
> Thanks... when reading the error message and skimming the man page, I
> thought it was promoting width of the argument to 4 bytes, not that
> "in the event that the prototype isn't here, things will get hard to
> debug."  Thank you, for your incite.  -sc

Gcc has many warning options and quite a few would be classified as not
applicable for general use (but might be useful to someone carrying on a=20
particular investigation). This particular one is not, to my knowledge,
included in any of the catchalls such as -Wall or -W.

Malcolm



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306110909.00568.malcolm.kay>