On Thu, Dec 13, 2018 at 12:48:18PM -0700, Martin Sebor wrote: > > The support is necessary in order to determine the attributes > > in expressions such as: > > > > struct S { __attribute__ ((packed)) int a[32]; }; > > > > extern struct S s; > > > > _Static_assert (__builtin_has_attribute (s.a, packed)); > > An example involving types might be a better one: > > typedef __attribute__ ((may_alias)) int* BadInt; > > void f (BadInt *p) > { > _Static_assert (__builtin_has_attribute (*p, may_alias)); > }
So how is the builtin defined then? Is the argument always an expression and you only return whether its type has the attribute, or do something different if the expression is of certain kind? Perhaps it would be better have two builtins, one would always take type from the expression, the other would only accept decls (or perhaps some syntax for the FIELD_DECLs). Jakub