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

--- Comment #10 from Jeffrey A. Law <law at redhat dot com> ---
So with a prototype patch to simplify the overflow checks to zero/not zero, we
still get the one warning.   The more I look at the code, the more I think the
warning is justified. 

Ponder the case where v.size () returns 0 in the test.  That'll result in
calling v.resize (-1).  

In the resize code we have:


     resize(size_type __new_size)
      {
        if (__new_size > size())
          _M_default_append(__new_size - size());
        else if (__new_size < size())
          _M_erase_at_end(this->_M_impl._M_start + __new_size);
      }
Remembering that we're working with size_t (ie, unsigned) objects, we'll go
into the TRUE clause, calling:

  std::vector<unsigned int>::_M_default_append (&v, 18446744073709551615);

At which point I think we've lost....  And ISTM that GCC gave a valid warning
for the given inputs.


Thoughts Martin?

Reply via email to