https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38474
--- Comment #89 from Richard Biener <rguenth at gcc dot gnu.org> --- Fallout includes FAIL: g++.dg/opt/store-merging-1.C scan-tree-dump store-merging "New sequence of [12] stores to replace old one of 2 stores" which shows Starting new chain with statement: s ={v} {CLOBBER}; The base object is: &s Recording immediate store from stmt: s.a = 0; Recording immediate store from stmt: s.b = 0; stmt causes chain termination: foo (s); and the CLOBBER allows us to use zeros for padding: Store 0: bitsize:64 bitpos:0 val:{CLOBBER} Store 1: bitsize:32 bitpos:0 val:0 Store 2: bitsize:8 bitpos:32 val:0 After writing {CLOBBER} of size 64 at position 0 the merged value contains 00 00 00 00 00 00 00 00 the merged mask contains 00 00 00 00 00 00 00 00 After writing 0 of size 32 at position 0 the merged value contains 00 00 00 00 00 00 00 00 the merged mask contains 00 00 00 00 00 00 00 00 After writing 0 of size 8 at position 32 the merged value contains 00 00 00 00 00 00 00 00 the merged mask contains 00 00 00 00 00 00 00 00 Coalescing successful! Merged into 1 stores New sequence of 1 stores to replace old one of 2 stores # .MEM_6 = VDEF <.MEM_5> MEM <unsigned long> [(void *)&s] = 0; Merging successful!