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.