https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97335
--- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> --- This case is about: <bb 28> [local count: 177167400]: + pretmp_327 = MEM[(int *)dep_dp_76(D) + 8B]; + goto <bb 46>; [100.00%] + + <bb 29> [local count: 177167400]: ctx_144 = _44 + 4; + pretmp_335 = MEM[(int *)dep_dp_76(D) + 8B]; where dep_dp is of type: typedef struct { unsigned int Drange; unsigned int Dvalue; int DbitsLeft; byte *Dcodestrm; int *Dcodestrm_len; } DecodingEnvironment; and so dep_dp_76(D) + 8B is 'Dvalue' field of the struct. Looking at the code, there are really places where one takes pointer of the field: benchspec/CPU/525.x264_r/src/ldecod_src/biaridecod.c: unsigned int *value = &dep->Dvalue; benchspec/CPU/525.x264_r/src/ldecod_src/biaridecod.c: unsigned int *value = &dep->Dvalue; But the usage seems fine to me, no casting and direct usage of the 'unsigned int *'.