https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56961
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- The C++ gimplify langhook gimplifies the gimplifier generated vol.1 = b.fields as vol.1, b.fields; so it isn't a manifestation of the issue but a fallout of the attempt to fix it in the C++ gimplifier... it drops the assignment but leaves the load from the volatile in place (as side-effect to be preserved?). But then we gimplify that again ... producing vol.2 = b.fields ... and on we go.