[Bug tree-optimization/79721] Scalar evolution introduces signed overflow

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Feb 27 10:20:00 GMT 2017


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2017-02-27
                 CC|                            |rguenth at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
SCCP currently guards doing everything in unsigned arithmetic with

      /* If def's type has undefined overflow and there were folded
         casts, rewrite all stmts added for def into arithmetics
         with defined overflow behavior.  */
      if (folded_casts && ANY_INTEGRAL_TYPE_P (TREE_TYPE (def))
          && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (def)))
        {

but here folded_casts is false.  Clearly the above is bogus as it doesn't take
into account that computing the final value replacement involves association.
So the "fix" would be to unconditionally rewrite the expression to use unsigned
arithmetic (even for ! TYPE_OVERFLOW_UNDEFINED, which should have been
TYPE_OVERFLOW_WRAPS anyway).


More information about the Gcc-bugs mailing list