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.