The great inapplicable attribute debate

Stewart Gordon smjg_1998 at yahoo.com
Mon Apr 13 08:09:41 PDT 2009


Frits van Bommel wrote:
> Stewart Gordon wrote:
<snip>
[rearrangement of class fields]
> 
> Right, forgot about that bit. Probably because AFAIK no D compiler 
> actually reorganizes them...
> 
> (How does this combine with the "D ABI" anyway? I know binary 
> compatibility between the different compilers is a bit of a pipe dream 
> at the moment, but the only way that could work would be to standardize 
> any and all shuffling of class fields...)

Good question.  But AAs are another thing that's implementation defined 
at the moment.

<snip>
> Unions are normally aligned to the maximum alignment for any member. Now 
> consider:
> 
> union U {
>     align(1) void* p;
>     ubyte[size_t.sizeof] bytes;
> }
> union U2 {
>     align(4) ubyte[12] data;
>     char[12] str;
> }
> What are U.alignof and U2.alignof?
> 
> According to that piece of the spec, those align() attributes should be 
> useless.
> However, according to DMD[1] U.alignof is 1, and without the attribute 
> it's 4.
> U2 on the other hand is align(1) regardless of attribute.
<snip>

Sounds like a bug.

Surely, align isn't applicable to unions at all.  IINM the members of a 
union, by design, start at the same offset.  An anonymous struct within 
a union, or an anonymous union within a struct, might have alignment - 
in either case, it would be in relation to the struct.

Stewart.



More information about the Digitalmars-d mailing list