gcc me harder: -Wconversion bug?
Sean Chittenden
sean at chittenden.org
Tue Jun 10 13:00:45 PDT 2003
> > > 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.
> >
> > % 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
--
Sean Chittenden
More information about the freebsd-questions
mailing list