From owner-freebsd-bugs@FreeBSD.ORG Sun Mar 16 07:40: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 A7B211065684 for ; Sun, 16 Mar 2008 07:40: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 ACC808FC29 for ; Sun, 16 Mar 2008 07:40: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 m2G7e2cG024949 for ; Sun, 16 Mar 2008 07:40:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m2G7e2En024948; Sun, 16 Mar 2008 07:40:02 GMT (envelope-from gnats) Date: Sun, 16 Mar 2008 07:40:02 GMT Message-Id: <200803160740.m2G7e2En024948@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:40: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:32:55 -0500 ----- Forwarded message from Dan Lukes ----- From: Dan Lukes To: Bruce Evans Cc: freebsd-bugs@FreeBSD.org, imp@FreeBSD.org OK There seems to be several ways to correct the problem. We can avoid the warning by adding "const" or "volatile" or __used or by removing "static". The "remove static" way can't be used - non-static symbol is global variable - so const char copyright[] from one source will collide with the same name variable from another source. It's not problem only when there are one source file only or we can guarantee unique variable name. 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. 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. 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. 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 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. Dan ----- end forwarded message -----