Dealing with warnings on __attribute__((user)) when dehydra is not loaded

Benjamin Smedberg benjamin@smedbergs.us
Fri Oct 16 16:59:00 GMT 2009


On 10/16/09 12:11 PM, Tom Tromey wrote:
>>>>>> "Diego" == Diego Novillo <dnovillo@google.com> writes:
> 
> Diego> void foo(void) __attribute__((user("bleh")));
> 
> Diego> foo.cc:1: warning: 'user' attribute directive ignored
> 
> Diego> We could change the compiler to never complain about the 'user'
> Diego> attribute, unless plugins are loaded,but that also seems incomplete.
> 
> How about just having __attribute__ ((plugin (pluginname, arg...)))
> and ignoring an attribute when the named plugin is not loaded?
> It seems to me that having a single "user" attribute shared by all
> plugins will lead to some pain later on.

Dehydra is going to switch from the generic user attribute to specific
GCC-registered attributes __attribute__((NS_final)) at some point when one
of us can code it up. In particular it would be nice to have more validation
of attribute application: in particular because the user attribute can apply
to types or declarations it's much easier for code authors to misplace,
especially when combined with function pointers.

I don't particularly like __attribute__((plugin (pluginname, arg))). You're
forced to code plugin names into your source, when you may not actually know
the name of the plugin that's going to process your annotations. Mozilla is
likely to have generic attributes (NS_final and others) which are not
specific to one plugin. We already have a volunteer working on an
optimization pass and an analysis pass for an attribute always_returns_zero:
these passes are likely to be in different plugins (optimization in a
compiled plugin, analysis in dehydra/treehydra).

--BDS



More information about the Gcc mailing list