http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57199



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



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|NEW                         |RESOLVED

         Resolution|                            |INVALID



--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> 2013-05-08 
08:57:45 UTC ---

Note that there seems to be an error in the source:



    void resize(size_t n) {

        size_t s = size();

        DestroyElements(mutable_array() + n, s - n);



for the call with n == size () + 1 the function calls DestroyElements

with -1U elements which we figure out and optimize the caller to



  <bb 3>:

  _13 = i_12 * 80;

  _14 = _11 + _13;

  Foo::~Foo (_14);

  i_15 = i_12 + 1;



  <bb 4>:

  # i_12 = PHI <0(2), i_15(3)>

  if (i_12 != 18446744073709551615)

    goto <bb 3>;

  else

    goto <bb 5>;



which then causes the addition to overflow and invoke undefined behavior

and we warn.



Thus, the warning, while not 100% helpful, points at a real problem.

Reply via email to