A patch to constify gcc.c (Really, summarizing remaining warnings)
Zack Weinberg
zack@rabi.columbia.edu
Wed Mar 10 20:10:00 GMT 1999
On Wed, 10 Mar 1999 22:22:17 -0500 (EST), "Kaveh R. Ghazi" wrote:
> Okay, I'll summarize the remainder of -W -Wall a bit.
[...]
>5. 20 statement with no effect
>
> These are all due to intl calls to `bindtextdomain' and
>`textdomain'. In intl/libintl.h, these are defined to "((char *)
>Domainname)" which gives the above warning. We could probably get rid
>of it by casting these to (void) at the site of each call.
Since we never ever use the result of bindtextdomain or textdomain, we
could also define these functions to a void expression in
intl/libintl.h. This would be much less invasive but might be
excessively sneaky for some people's taste, since the real functions
do return a value.
>6. 25-35 implicit declaration of function `putc_unlocked'
>
> These have been discussed, but I don't believe I ever heard a
>satisfactory solution posted. See
> http://www.cygnus.com/ml/egcs/1999-Jan/0361.html
There appear to be three related problems:
- Sometimes the functions are not prototyped unless _REENTRANT is
defined. In that case we don't need to use them, since plain
putc/getc are equivalent when _REENTRANT is not defined. We should
use GCC_NEED_DECLARATION if we see the functions in the library, and
if they aren't prototyped, ignore them.
- Sometimes the functions are only macros. We would need to use
something like AC_EGREP_CPP to figure out if macro definitions are
present. This would be ugly. These systems deserve to lose IMO; it's
a design principle of the C library that you can do (func)(args...) to
suppress a macro, and it'll work (with a very few exceptions).
- fputs_unlocked is also used if available. This one is a GNU
extension, and glibc 2.x doesn't prototype it unless you define
_GNU_SOURCE. I sent in a patch for system.h earlier today that
defines _GNU_SOURCE if HAVE_FPUTS_UNLOCKED is defined. I believe this
to be safe; however, it does pull in an immense amount of other stuff,
and if the BSDs pick up fputs_unlocked, it may stop working.
>7a. 9 variable `???' might be clobbered by `longjmp' or `vfork'
>7b. 5 argument `???' might be clobbered by `longjmp' or `vfork'
>
> (A bit more of these also occur in the cp/ and java/ dirs.)
>
>I don't know how we could fix these. Perhaps one could make the
>parameter or variable volatile, but it doesn't really fix the problem
>and it seems to just provoke the warning on another variable. (?)
Where do we use longjmp and vfork? Are they necessary?
> That's about it. Each platform has about 10 or less stray
>warnings beyond the above which we could squash when we get the bulk
>of the remaining ones. I hope others would help out with this since
>I'm kind of tired of doing it. :-)
I sent a patch for some of these several weeks ago and got no
comments. There was a possible bug in there: i386.h defines
ASM_OPEN_PAREN and ASM_CLOSE_PAREN to the empty string. No one else
does this. I could imagine the assembler getting precedences
wrong without any parentheses. Is it really correct?
Patch was http://egcs.cygnus.com/ml/egcs-patches/1999-02/msg00364.html .
zw
More information about the Gcc-patches
mailing list