zero-sized arrays and alignment

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

zero-sized arrays and alignment

edA-qa mort-ora-y
I've done some playing with zero-sized arrays and would like to confirm
that my findings are correct. I can't easily test on a lot of platforms,
nor is this clearly covered in the docs, so I'd like to be sure before I
rely heavily on it.

1. A zero-sized array in a structure will be aligned to the natural
alignment of the contained type. That is, [0 x T] will be aligned
appropriately for T.

2. A zero-sized array in a structure takes up no space.  (ex: sizeof( {
i32, [0 x i8], double ) == sizeof( { i32, double } )

3. The element following a zero-sized array has the same address as the
array if it's alignment requirements are equal or less strict.

If all this is true, which testing shows on the x86_64 platform, then I
can use zero-sized arrays to force the alignment of any structure
element. I don't have to calculate the padding on my own (as does clang).

For example, the C++ struct:
        struct pine {
                int8_t a;
                int8_t alignas(int32_t) b;
Can become:
        type { i8, [0 x i32], i8 }

edA-qa mort-ora-y
Leaf Creator

Leaf - the language we always wanted
LLVM Developers mailing list
[hidden email]