cvs commit: src/usr.bin/chat Makefile

Bruce Evans bde at zeta.org.au
Tue Oct 28 21:11:35 PST 2003


On Tue, 28 Oct 2003, Peter Wemm wrote:

> Tim Kientzle wrote:
> > > On Sat, 25 Oct 2003, Peter Wemm wrote:
> > >>peter       2003/10/25 21:49:58 PDT
> > >>
> > >>  FreeBSD src repository
> > >>
> > >>  Modified files:
> > >>    usr.bin/chat         Makefile
> > >>  Log:
> > >>  The math function logf() probably isn't doing us much good for logging
> > >>  stuff.  Add -fno-builtin-logf.
> >
> > Rather than commit ugly Makefile hacks like
> > this, just rename the damned function and
> > be done with it.
>
> Be my guest.  Be sure to get your changes are sent back to the vendor, or
> that the vendor has fixed it already.

This is not what you asked for, but here is a quick fix for the main bugs
in -Wshadow.  It has not been sent to the vendor or built the world.  It
doesn't affect chat unless chat is compiled with a C90 compiler (so that
<math.h> doesn't declare logf()), since chat bogusly declares logf() as
global.

%%%
Index: c-decl.c
===================================================================
RCS file: /home/ncvs/src/contrib/gcc/c-decl.c,v
retrieving revision 1.9
diff -u -2 -r1.9 c-decl.c
--- c-decl.c	22 Aug 2003 03:14:37 -0000	1.9
+++ c-decl.c	29 Oct 2003 04:57:16 -0000
@@ -977,5 +977,7 @@
 	     built-in definition is overridden,
 	     but optionally warn this was a bad choice of name.  */
-	  if (warn_shadow)
+	  /* XXX Actually only warn if the built-in is declared somewhere
+	     other than in the compiler.  */
+	  if (warn_shadow && DECL_SOURCE_LINE (olddecl) != 0)
 	    warning_with_decl (newdecl, "shadowing built-in function `%s'");
 	  /* Discard the old built-in function.  */
@@ -1647,5 +1649,8 @@
 	}
       else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
-	       && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
+	       && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node
+	       /* XXX No shadow warnings for shadowing built-ins that are
+		  not declared somewhere other than in the compiler.  */
+	       && DECL_SOURCE_LINE (IDENTIFIER_GLOBAL_VALUE (name)) != 0)
 	shadow_warning ("a global declaration", name,
 			IDENTIFIER_GLOBAL_VALUE (name));
%%%

Test program:

%%%
#ifdef DECLARE_MATH_FUNCTIONS
#include <math.h>
#endif

/* This shouldn't shadow log() unless math.h is included. */
static int
log(double x)
{
	return (x);
}

int
main(void)
{
	/* This shouldn't shadow logf() unless math.h is included. */
	int logf;

	logf = 1;
	return (logf);
}
%%%

Bruce


More information about the cvs-all mailing list