(Original discussion: http://forum.dlang.org/thread/fckwpddiwxonabqaf...@forum.dlang.org#post-pskjgieddhpntzaokohj:40forum.dlang.org)

    align(1) struct A
    {
    align(1):
        int qtim;
        int bid;
        int ofr;
        int bidsiz;
        int ofrsiz;
        short mode;
        char[1] ex;
        char[4] mmid;
    }

    align(1) struct B
    {
        int qtim;
        int bid;
        int ofr;
        int bidsiz;
        int ofrsiz;
        short mode;
        char[1] ex;
        char[4] mmid;
    }

I would expect `B` to have a gap between `ex` and `mmid`. AFAIK the outer `align(1)` only applies to the struct in its entirety, not to the individual fields. However for both DMD git and LDC 0.14.0-alpha1 (based on DMD 2.065), `A` and `B` have the same size.

After some thinking, I believe this is because arrays inherit the alignment of their element types. Is this correct? If yes, where is this documented? I had expected `char[4]` to be aligned at a 4-byte boundary.

Reply via email to