https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101708

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ebotcazou at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
void reset2 (struct example * e)
{
  unsigned int _1;
  <unnamed-unsigned:1> _2;

  <bb 2> [local count: 1073741824]:
  _1 = e_4(D)->a;
  _2 = e_4(D)->c;
  *e_4(D) = {};
  e_4(D)->a = _1;
  e_4(D)->c = _2;
  return;

So yeah, store-merging could detect that ->a and ->c are preserved, not sure
how awkward that would be though.  It'll be "splitting" the zero-init {}
into pieces based on each "preserve previous value" store.  Or sth like that.

Reply via email to