https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116856
Robert Hölzl <robert.hoelzl at posteo dot de> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |WAITING Resolution|INVALID |--- --- Comment #9 from Robert Hölzl <robert.hoelzl at posteo dot de> --- I know that this solves the problem (as I wrote in my last comment). But why does GCC handle an inline typecast (uint32_t __attribute__ ((__aligned__(1)))*) different from a typecast to an typedef (u32_u*) when the typedef is identical to the inline typecast? In other words: typedef uint32_t __attribute__((aligned(1))) u32_u; uint32_t x = *(u32_u *) y; should be identical to uint32_t x = *(uint32_t __attribute__ ((__aligned__(1)) *) y; right? But the latter one is generating wrong code (which contains LDRD)