http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57862
--- Comment #4 from Gaetano Mendola <mendola at gmail dot com> --- At this point I'm very puzzled. The fact I have to use memcpy instead of an assignment for sake of portability is plain wrong. Consider that only looking at: struct in_addr myInAddr; myInAddr.s_addr = theIpHeader->daddr; I have no idea if the theIpHeader pointer was the result of a malloc or the result of an assignment with a not aligned offset. Unless of course I inspect the pointer value. The entire application (my application) suppose, as I think it should, that an assignment of a value retrieved from a structure member is correctly done, note that I'm not relying if this is done with 1 bus access, 2 or whatever. I'm going to put 2 in /proc/cpu/alignment and considering it as a kernel configuration problem. btw clang behaves correctly even with a "kernel not well configured".