https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127454
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Richard Biener from comment #2) > + sp_24 = .DEFERRED_INIT (8, 2, &"sp"[0]); > + sp$8_16 = .DEFERRED_INIT (8, 2, &"sp"[0]); > + sp$16_7 = .DEFERRED_INIT (4, 2, &"sp"[0]); > sp = .DEFERRED_INIT (24, 2, &"sp"[0]); > ... > + MEM <long unsigned int> [(void *)&sp] = sp_24; > + MEM <long unsigned int> [(void *)&sp + 8B] = sp$8_16; > + MEM <int> [(void *)&sp + 16B] = sp$16_7; > read_ctrl_pos (lruvec_2(D), iftmp.0_38, 0, 0, 2, &sp); If it rewrites that way the whole .DEFERRED_INIT store to the whole object with .DEFERRED_INIT individual stores to the separate elements, then it certainly shouldn't do it, both it is less efficient and risks not clearing (or setting to pattern) padding bits. Or if such separation is beneficial for some to me unknown reason, SRA should at least mark those stores back to the original memory with disable -Wuninitialized warning (though, I think the warning control is based on location_t and so disabling it just for the particular store could disable it for other stores too). Anyway, stores of .DEFERRED_INIT to other unrelated locations shouldn't have warnings disabled, unless the source is whole struct copying or memcpy/memmove.
