https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43798

Alexander Monakov <amonakov at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amonakov at gcc dot gnu.org

--- Comment #15 from Alexander Monakov <amonakov at gcc dot gnu.org> ---
Not 100% sure if it's known, the comments don't seem to mention this, so I'll
note for completeness sake:

placement of the attribute makes a difference, here it looks like the attribute
on the type introduced via a typedef leads to weird semantics, while the
attribute on the struct itself leads to logical 32/16 size/align:

typedef struct __attribute__((aligned(16))) {
    unsigned long long w[3];
} UINT192;

int a1 = __alignof(UINT192);
int s1 = sizeof(UINT192);

a1:
        .long   16
s1:
        .long   32


Also one cannot create a 64-bit aligned/128-bit sized typedef to 'long double'
on 32-bit:

typedef long double T __attribute__((aligned(8)));

int a1 = __alignof(T);
int s1 = sizeof(T);

a1:
        .long   8
s1:
        .long   12

Reply via email to