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

--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> ---
Adding

inline void* operator new(std::size_t n){return __builtin_malloc(n);}
inline void operator delete(void*p)noexcept{__builtin_free(p);}
inline void operator delete(void*p,std::size_t)noexcept{__builtin_free(p);}

lets gcc optimize. Without it, we end up with

  _37 = operator new (51);
  __builtin_memcpy (_37, "Hey... no small-string optimization for me please!",
50);
  MEM[(char_type &)_37 + 50] = 0;
  operator delete (_37, 51);
  return 123;

I expect DSE (via tree-ssa-alias.c) doesn't know about delete the way it knows
about free and thus doesn't see the stores as dead.

Reply via email to