From owner-freebsd-bugs@FreeBSD.ORG Sun Mar 16 07:50:02 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 610C21065673 for ; Sun, 16 Mar 2008 07:50:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 664608FC17 for ; Sun, 16 Mar 2008 07:50:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m2G7o2XE025832 for ; Sun, 16 Mar 2008 07:50:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m2G7o21t025830; Sun, 16 Mar 2008 07:50:02 GMT (envelope-from gnats) Date: Sun, 16 Mar 2008 07:50:02 GMT Message-Id: <200803160750.m2G7o21t025830@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: linimon@lonesome.com (Mark Linimon) Cc: Subject: Re: bin/71613: [PATCH] traceroute(8): cleanup of the usr.sbin/traceroute6 code X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Mark Linimon List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 Mar 2008 07:50:02 -0000 The following reply was made to PR bin/71613; it has been noted by GNATS. From: linimon@lonesome.com (Mark Linimon) To: bug-followup@FreeBSD.org Cc: Subject: Re: bin/71613: [PATCH] traceroute(8): cleanup of the usr.sbin/traceroute6 code Date: Sun, 16 Mar 2008 02:42:13 -0500 ----- Forwarded message from Bruce Evans ----- From: Bruce Evans To: Dan Lukes Cc: freebsd-bugs@freebsd.org __COPYRIGHT() in reduces this problem by concatenating __LINE__. It could also concatenate a file name (but not __FILE__, since that is probably not an identifier). > It seems we need 'static'. Unfortunately, static unused variable can >be optimized out. > > Adding 'const' and/or __used clear the warning, but doesn't prevent >"optimized-out" problem. The 'const' shall be used because the string is >constant. We can use __used, but it has limited portability. > > We still have the problem the variable may be optimized out. __used prevents this. > The 'volatile' is way to tell an ANSI C compiler "this variable may >be modified via mechanism you don't know about it" - it mean "count it as >used" and "don't optimize it". Note, the 'const' and 'static' are ANSI C >keywords also, so compiler knowing 'static' shall handle 'volatile' as well. volatile doesn't prevent the variable being optimized out for gcc-4.2. This makes some sense -- volatile sort of means "use it carefully", but when it is not used no care with it is needed. > Conclusion (for the case we can't guarantee the unique name of >variable): >static MUST >const SHALL >__used SHALL >volatile MUST > >So my recomentation is: >0: static volatile const char __used copyright[]=... > >because of __unused the sys/cdefs.h must be included first. I prefer 'static char const __used copyright[]'. Not sure where __used belongs. >The other way to fix it is >1: the sys/copyright.h way - e.g. plain char variable - but the variable >must be unique across the sources which sound not so easy for me Not too bad -- there is supposed to be only one copyright[] per executable. >2. the __COPYRIGHT way, but >2a: IDSTRING must be corrected first >2b: the '\n' must be removed from the source. > >sys/cdefs.h must be included first. > > In my opinion the preference shall be 2a then 0 then 1 or 2b but > it's not strict. The commiter shall select the best way. 2b is no good. __COPYRIGHT() of course allows putting all the unportabilities in one place and changing the easily. It's just too ugly for me. Everything in should have gone away with __P(()). Bruce ----- End forwarded message -----