https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89546
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- And in the *.sra dump, I really don't see any way how it could be two: MEM[(struct &)&n1D.7146 clique 22 base 1] ={v} {CLOBBER}; ... n1D.7146 ={v} {CLOBBER}; ... MEM[(struct &)&n1D.7698 clique 27 base 1] ={v} {CLOBBER}; SR.161_6 = SR.150_36; MEM[(struct tupleD.6437 *)&n1D.7698 + 8B] = SR.161_6; n1$tail$head$payload_91 = MEM[(struct tupleD.6437 *)&n1D.7698 + 4B]; ... n1D.7698 ={v} {CLOBBER}; and no other stmts referencing n1. So, we have the whole var undefined, then we store an int at offset 8 bytes into it and read an int from offset 4 into it. That is uninitialized load which as #c5 tried to prove wasn't there before late_intra_sra.