https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94655
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> --- Using the base object in the MEM_REF instead of the member when accessing another member should certainly fix it. Another option might be to somehow mark up these synthesized stores (e.g., by setting some currently unused bit) to make it clear they were emitted for valid source code. I'd prefer the former option since that would preserve the validity (in the C/C++ sense) of the source code.