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

--- Comment #42 from Alexey Salmin <alexey.salmin at gmail dot com> ---
Sorry for being unclear.

When I need a pointer to an unaligned type I wrap it in a struct. E.g. a fix
for SIGSEGV from comment#36 would look like this:

struct pair_t {
    char c;
    __int128_t i;
} __attribute__((packed));

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

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

int main() {
    addr->value = ~(__int128_t)0;
    return (p.i != 1) ? 0 : 1;
}

I was trying to say that I'm glad that the "address-of-packed-member" warning
isn't triggered by this code. It still relies on the "address of packed member"
but in a safe way.

Reply via email to