https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120616
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Jia-Xien Fang from comment #3) > Is there any ways to perform the cast for the parameter without using > -fno-strict-aliasing? The issue is not the cast but what type the load and store are done as. `(long *)(long[]){0, 0}` works for an example. it is not obvious how to fix the issue using memcpy or an union though. You could change: if (*o < 1) { to: long ot; memcpy(&ot, o, sizeof(long)); if (ot < 1) { and that would work too. But it is not obvious based on this reduced code what is the correct fix for the code.