bin/71613: [PATCH] traceroute(8): cleanup of the
usr.sbin/traceroute6 code
Mark Linimon
linimon at lonesome.com
Sun Mar 16 07:50:02 UTC 2008
The following reply was made to PR bin/71613; it has been noted by GNATS.
From: linimon at lonesome.com (Mark Linimon)
To: bug-followup at 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 <brde at optusnet.com.au> -----
From: Bruce Evans <brde at optusnet.com.au>
To: Dan Lukes <dan at obluda.cz>
Cc: freebsd-bugs at freebsd.org
__COPYRIGHT() in <sys/cdefs.h> 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
<sys/cdefs.h> should have gone away with __P(()).
Bruce
----- End forwarded message -----
More information about the freebsd-bugs
mailing list