Re: __attribute__((unused))

From: Frank van Maarseveen
Date: Fri Oct 15 2004 - 07:36:50 EST


On Thu, Oct 14, 2004 at 10:02:43PM +0100, Russell King wrote:
>
> I notice that module.h contains stuff like:
>
> #define MODULE_GENERIC_TABLE(gtype,name) \
> extern const struct gtype##_id __mod_##gtype##_table \
> __attribute__ ((unused, alias(__stringify(name))))
>
> and even:
>
> #define __MODULE_INFO(tag, name, info) \
> static const char __module_cat(name,__LINE__)[] \
> __attribute_used__ \
> __attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info
>
> My understanding is that we shouldn't be using __attribute__((unused))
> in either of these - can someone confirm.
>
> The second one looks fairly dodgy since we're telling a compiler that
> it's both used and unused. That sounds a bit like a HHGTTG puzzle (you
> have tea and no tea.)

This makes sense, assuming the gcc info pages are correct:
`unused'
This attribute, attached to a function, means that the function is
meant to be possibly unused. GCC will not produce a warning for
this function. GNU C++ does not currently support this attribute
as definitions without parameters are valid in C++.

`used'
This attribute, attached to a function, means that code must be
emitted for the function even if it appears that the function is
not referenced. This is useful, for example, when the function is
referenced only in inline assembly.

So, a function could be "used" and "unused" at the same time:

unused -> don't warn
used -> don't discard

--
Frank
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/