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

--- Comment #46 from Alexey Salmin <alexey.salmin at gmail dot com> ---
Tested the latest patch, behavior looks very reasonable even in tricky cases.

1) No warning, gcd(12, 8) == 4
    struct tuple_t {
        char c[12];
        __int128_t i;
    } __attribute__((packed, aligned(8)));

    typedef struct unaligned_int128_t_ {
        __int128_t value;
    } __attribute__((packed, aligned(4))) unaligned_int128_t;

    struct tuple_t p = {0, 1};
    unaligned_int128_t *addr = (unaligned_int128_t *)(&p.i);

2) Gives a warning, gcd(10, 8) < 4
    struct tuple_t {
        char c[10];
        __int128_t i;
    } __attribute__((packed, aligned(8)));

    typedef struct unaligned_int128_t_ {
        __int128_t value;
    } __attribute__((packed, aligned(4))) unaligned_int128_t;

    struct tuple_t p = {0, 1};
    unaligned_int128_t *addr = (unaligned_int128_t *)(&p.i);

Reply via email to