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

--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Reduced:

template<typename T>
struct vector
{
  using pointer = T*;

  pointer begin, end, end_of_storage;

  void pop_back()
  {
    (end--)->~T();
  }
};

using size_t = decltype(sizeof(0));

void pop_many(vector<int>& v, size_t n) {
    for (size_t i = 0; i < n; ++i) {
        v.pop_back();
    }
}


With -O2 -fno-lifetime-dse we get the expected code back.

Reply via email to