Stewart Gordon wrote:
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.

Definitely.

Surely, align isn't applicable to unions at all. IINM the members of a union, by design, start at the same offset.

Not so, the alignment of each member should be respected. Most obviously, a union U consisting of a single member x should have U.alignof == x.alignof.


  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.

Reply via email to