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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
             Status|UNCONFIRMED                 |RESOLVED
          Component|middle-end                  |tree-optimization
         Resolution|---                         |INVALID

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
(gdb) p debug_generic_expr (ref)
work[98]

<bb 26>:
_40 = strlen (&work);
_41 = (unsigned int) _40;
_42 = _41 + 1;
size_43 = (int) _42;
if (size_43 > 99)
  goto <bb 27>;
else
  goto <bb 35>;

<bb 27>:
size_65 = ASSERT_EXPR <size_43, size_43 > 99>;
work[98] = 0;


Before inlining (knowing buffersize == 99) we have

  <bb 18>:
  _10 = strlen (&work);
  _11 = (unsigned int) _10;
  _12 = _11 + 1;
  size_48 = (int) _12;
  if (size_48 > buffersize_49(D))
    goto <bb 19>;
  else
    goto <bb 20>;

  <bb 19>:
  _13 = buffersize_49(D) + -1;
  work[_13] = 0;

but 'work' is [0, 27].  So clearly the code is bogus (even if we warn on dead
code).

Reply via email to