Bug#522773: possible solutions for __unused problem
Robert Millan wrote:
> When it comes to __attibute__((__unused__)), it's just a matter of
> agreeing on whether to call it __attribute_unused__ or __unused.
I don't agree. It's perfectly fine for there to be multiple names
for the thing --- the task at hand is dividing up the __* namespace
between libbsd and libc.
Would it be possible to collect a near-exhaustive list of identifiers
like this (i.e., used in BSD application code and starting with __)
that could cause trouble? Then we can propose sed-ing them away at
header installation time to the libc-ports maintainers (as Thorsten
suggested), and I wouldn't be surprised if such a patch is accepted.
Thanks for moving this forward. Thoughts below about the alternatives
> - Propose to BSD folks that they accept __attribute_* prefix and
> define those macros (in addition to __unused etc), then begin
> accepting patches that replace __unused with __attribute_unused.
If I were in their shoes, I wouldn't be happy about such patches. It
sounds like heavy patching without much immediate benefit, with no end
in sight (since glibc could start using another keyword the next day).
> - Propose to GCC folks that they define __attribute_* macros in
> <stddef.h> (they won't define __unused since this would break
> Linux and Glibc), then bring the same proposal to Clang folks. If
> both accept, FreeBSD is much more likely to backport it to GCC 4.2.
Likewise, in their shoes I wouldn't accept such patches. The macros
are not in the C or POSIX standard and are easy to define in terms of
the __attribute__() feature, so they're not part of what a C compiler
is supposed to do. Making each implementation of the standard headers
add these macros would hinder portability between implementations
(yes, there are more than two :)).
> - Work with standards bodies (POSIX?) so that they specify either
> definition (it doesn't matter to us which one, the offending
> definition will have to adapt).
That sounds like an excellent idea! Presumably the C working group
would be likely to consider standardizing __attribute__((__unused__))
if it is proposed, since that syntax is already widely implemented.
C++0x has its own attribute syntax which could make something like