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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
  <bb 6> [local count: 751619280]:
  *_154 ={v} {CLOBBER(bob)};
  _227 = &_154->D.5702._M_local_buf;
  MEM[(struct _Alloc_hider *)_154] ={v} {CLOBBER(bob)};
  MEM[(struct _Alloc_hider *)_154]._M_p = _227;
  __builtin_memcpy (_227, "Three", 5);
  _154->_M_string_length = 5;
  MEM[(char_type &)_154 + 21] = 0;

is what we diagnose.

And the reason is we do

  _181 = operator new (64);
...
  _164 = _181 + 32;
...
  _154 = _164 + 32;
...
  _175 = _181 + 64;
...
  if (_154 != _175)
    goto <bb 6>; [70.00%]

and we fail to eliminate the compare.  Ugh.

Reply via email to