https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108695
--- Comment #8 from Martin Liška <marxin at gcc dot gnu.org> --- Ok, one suspicious casting of memory comes from: typedef union _roundkey { unsigned char data[16]; unsigned int data32[4]; } roundkey; ... typedef struct _sec_fields { ... roundkey ekeys[40]; ... uchar *rkeys = (uchar*)crypto->ekeys; //malloc(alg->ctx_size); It's then passed to rijndaelEncrypt(const u8 *rkeys /*u32 rk[4*(Nr + 1)]*/, uint Nr, const u8 pt[16], u8 ct[16]) as the first argument, where it's later used as: const u32 *rk = (u32*)rkeys; Might be the violation we face? Here are mixed 'roundkey *' and 'u32*'.