http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48781
--- Comment #2 from Zhangxi Tan <tanzhangxi at gmail dot com> 2011-04-26 22:25:42 UTC --- (In reply to comment #1) > The alignment of __uint128_t is 16byte. I think you are invoking undefined > behavior by using a data type which increases the alignment. _uint128_t does not assume a 16-byte alignment, right? Maybe using (unsigned int *) for pointer 'data' is not an good example. Changing it to (void *) and casting it to (__uint128_t *) has the same problem. Seems like, it's the combination of -O3, -mtune and -march. Problem doesn't show up if I don't use -O3.