Date: Thu, 30 Oct 2003 10:25:18 +0100 (CET) From: Harti Brandt <brandt@fokus.fraunhofer.de> To: Peter Jeremy <PeterJeremy@optushome.com.au> Cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/usr.bin/chat Makefile Message-ID: <20031030101640.G79774@beagle.fokus.fraunhofer.de> In-Reply-To: <20031030082313.GA1649@cirb503493.alcatel.com.au> References: <200310260449.h9Q4nwm9016893@repoman.freebsd.org> <20031026171515.P17272@gamplex.bde.org> <xzpu15w9rhk.fsf@dwp.des.no> <20031027152156.Y21211@gamplex.bde.org> <xzpbrs1afvz.fsf@dwp.des.no> <20031030082313.GA1649@cirb503493.alcatel.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031030101640.G79774>