[PATCH][RTL ifcvt] PR rtl-optimization/66940: Avoid signed overflow in noce_get_alt_condition
Richard Biener
richard.guenther@gmail.com
Mon May 23 11:27:00 GMT 2016
On Mon, May 23, 2016 at 1:17 PM, Kyrill Tkachov
<kyrylo.tkachov@foss.arm.com> 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 <kyrylo.tkachov@arm.com>
>
> 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 <kyrylo.tkachov@arm.com>
>
> PR rtl-optimization/66940
> * gcc.c-torture/compile/pr66940.c: New test.
More information about the Gcc-patches
mailing list