From owner-cvs-src@FreeBSD.ORG Thu Oct 30 01:25:35 2003 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AB3E316A4CE; Thu, 30 Oct 2003 01:25:35 -0800 (PST) Received: from mailhub.fokus.fraunhofer.de (mailhub.fokus.fraunhofer.de [193.174.154.14]) by mx1.FreeBSD.org (Postfix) with ESMTP id 73A3E43F93; Thu, 30 Oct 2003 01:25:33 -0800 (PST) (envelope-from brandt@fokus.fraunhofer.de) Received: from beagle (beagle [193.175.132.100])h9U9PIP18563; Thu, 30 Oct 2003 10:25:18 +0100 (MET) Date: Thu, 30 Oct 2003 10:25:18 +0100 (CET) From: Harti Brandt To: Peter Jeremy In-Reply-To: <20031030082313.GA1649@cirb503493.alcatel.com.au> Message-ID: <20031030101640.G79774@beagle.fokus.fraunhofer.de> References: <200310260449.h9Q4nwm9016893@repoman.freebsd.org> <20031026171515.P17272@gamplex.bde.org> <20031027152156.Y21211@gamplex.bde.org> <20031030082313.GA1649@cirb503493.alcatel.com.au> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: src-committers@FreeBSD.org cc: Bruce Evans cc: Peter Wemm cc: cvs-src@FreeBSD.org cc: Dag-Erling =?iso-8859-1?Q?Sm=F8rgrav?= cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/usr.bin/chat Makefile X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Oct 2003 09:25:35 -0000 On Thu, 30 Oct 2003, Peter Jeremy wrote: PJ>On Tue, Oct 28, 2003 at 10:28:24PM +1100, Bruce Evans wrote: PJ>>Similarly for `return (log(3));`. gcc doesn't do the log() inline, at PJ>>least on i386's with no options, but it knows to pass 3.0 and convert PJ>>the return value to int. PJ> PJ>It shouldn't. If I write: PJ> int foo(int x) PJ> { PJ> return (log(x)); PJ> } PJ>without explicitly declaring any prototype for log(), gcc should PJ>assume a declaration "int log(int);". Arbitrarily deciding that PJ>the declaration should be "double log(double);" breaks K&R C and PJ>C90 programs. PJ> PJ>It seems that gcc is diverging more and more from the ISO standards. I brought up this topic on gcc-patches. The answer was the 5th paragraph of 7.1.3: "All identifiers with external linkage in any of the following subclauses (including the future library directions) are always reserved for use as identifiers with external linkage." This seems to mean that your above code snippet is not legal, because log() impicitly gets external linkage, but is reserved by the library. Having a static log() should be ok, but will trigger that anoying gcc shadow warning. Well, whether this makes sense or not is questionable. Warnings should warn you not only when you invoke undefined behaviour, but also when you do something dangerous. In static void log(int i) { .... } someone else later might remove the 'static' which then leads to undefined behaviour. So the gcc-people think they'd rather warn here. You are invited to take part in the discussions on the list. harti -- harti brandt, http://www.fokus.fraunhofer.de/research/cc/cats/employees/hartmut.brandt/private brandt@fokus.fraunhofer.de, harti@freebsd.org