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.