Date: Thu, 30 Oct 2003 21:23:06 +1100 (EST) From: Bruce Evans <bde@zeta.org.au> To: Harti Brandt <brandt@fokus.fraunhofer.de> Cc: cvs-all@freebsd.org Subject: Re: cvs commit: src/usr.bin/chat Makefile Message-ID: <20031030211635.A4570@gamplex.bde.org> In-Reply-To: <20031030101640.G79774@beagle.fokus.fraunhofer.de> 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> <20031030101640.G79774@beagle.fokus.fraunhofer.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 30 Oct 2003, Harti Brandt wrote: > 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. Indeed. I'm not sure if the above gives undefined behaviour, but it is close to it. > 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. My patch is supposed to give the warning if and only if there is no 'static' (when <math.h> is not included). > You are invited to take part in the discussions on the list. ENOTIME :-). Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031030211635.A4570>