https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116672
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- GCCs treatment of TBAA rules for pointer types vary over time but always within the constraints of the source language. Once you violate the source language constraints you are on your own and cannot expect GCC to magically do-what-you-mean. Use -fno-strict-aliasing if you know violating the source languages type based aliasing rules. In particular while int * and unsigned * can be used to access both int and unsigned data int ** cannot be used to access unsigned * data (or vice versa).