https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90217
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- Please always attach your testcases to bugzilla. I took a look at the .optimized dump. First issue is that we fail to simplify MEM[(union ._1 *)&apart] = 1; _3 = apart.D.2494.contam_level; Second issue is that we do not replace the write to the field lobby with a word-sized write, so the second read is harder to optimize than in the first issue.