<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Mar 22, 2014 at 10:37 AM, Renato Golin <span dir="ltr"><<a href="mailto:renato.golin@linaro.org" target="_blank">renato.golin@linaro.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Folks,<br>
<br>
Behan sent me a piece of code in the kernel with a parsing issue in<br>
Clang related to attributes:<br>
<br>
This works on GCC, but not on Clang:<br>
typedef unsigned char u8;<br>
int func(int len, int mask) {<br>
  return len + (mask & ~(__alignof__(u8 __attribute__ ((aligned))) - 1));<br>
}<br>
<br>
Clang's warning on the first is:<br>
  * 'aligned' attribute ignored when parsing type<br>
<br>
This fixes on Clang, too:<br>
typedef unsigned char u8;<br>
int func(int len, int mask) {<br>
  typedef u8 __attribute__ ((aligned)) u8_aligned;<br>
  return len + (mask & ~(__alignof__(u8_aligned) - 1));<br>
}<br>
<br>
I'm guessing Clang doesn't like inlined attributes. Is there a reason<br>
why this is not implemented, or is this just a case that nobody has<br>
seen before?<br>
<br>
If the former, what reason? If the latter, how simple would it be to<br>
implement it?</blockquote><div><br></div><div>This essentially is a design difference. Clang does not really have an 'aligned' attribute on types, it has an 'aligned' attribute on declarations (including typedef declarations). Adding support for this is possible, but it's a poorly-designed feature, especially when it interacts with C++ (the attribute is *not* part of the canonical type, and GCC silently ignores it in lots of places), so I'd be somewhat hesitant. We could probably support it in the operand of __alignof__ as a special case.</div>
</div></div></div>