bug in IRIX 4 C compiler
hello,
this is probably not the right place to post this - so, sorry in
advance.
anyway, onto the problem - it's not serious - the correct code is
generated - but you get a warning message cuz the compiler gets confused
about function argument types.
the shortest program to demonstrate it is...
/* bug.c */
char proc1(char);
char proc2(char);
void
warning(int choice)
{
char (*proc)(char);
proc = (choice) ? proc1 : proc2;
}
when you compile it "cc -c bug.c" the following warnings are
generated...
accom: Warning 294: bug.c, line 11: Function has prototyped and
non-prototyped declarations. Default promotion of non-prototype form of
argument 1 does not match prototype: prototype: char is different from
actual: int
proc = (choice) ? proc1 : proc2;
----------------------------------^
accom: Warning 196: bug.c, line 11: function prototypes are not
equivalent; function pointer assignment invalid
proc = (choice) ? proc1 : proc2;
----------------------------------^
for some reason it thinks the last argument to "proc1" and
"proc2" should be an int.
if you write...
if(choice)
proc = proc1;
else
proc = proc2;
instead, all is well.
the compilers with IRIX 5 and IRIX 6 don't have this trouble,
and as I said before, the correct code is generated - so it's more
annoying rather than anything else.
---
Simon Kilvington, srk.,at,.soton.ac.uk