On Mon, May 23, 2016 at 1:17 PM, Kyrill Tkachov <[email protected]> wrote: > Hi all, > > In this PR we end up hitting a signed overflow in noce_get_alt_condition > when we try to > increment or decrement a HOST_WIDE_INT that might be HOST_WIDE_INT_MAX or > HOST_WIDE_INT_MIN. > > I've confirmed the overflow by adding an assert before the operation: > gcc_assert (desired_val != HOST_WIDE_INT_MAX); > > This patch fixes those cases by catching the cases when desired_val has the > extreme > value and avoids the transformation that function is trying to make. > > Bootstrapped and tested on arm, aarch64, x86_64. > > I've added the testcase that I used to trigger the assert mentioned above as > a compile test, > though I'm not sure how much value it has... > > Ok for trunk?
If this isn't also a wrong-code issue (runtime testcase?) then why not perform the operation in unsigned HOST_WIDE_INT instead? Richard. > Thanks, > Kyrill > > 2016-05-23 Kyrylo Tkachov <[email protected]> > > PR rtl-optimization/66940 > * ifcvt.c (noce_get_alt_condition): Check that incrementing or > decrementing desired_val will not overflow before performing these > operations. > > 2016-05-23 Kyrylo Tkachov <[email protected]> > > PR rtl-optimization/66940 > * gcc.c-torture/compile/pr66940.c: New test.
