[PATCH] Fix forwprop pattern (T)(P + A) - (T)P -> (T)A, Part 2
Richard Biener
richard.guenther@gmail.com
Wed Jun 25 10:58:00 GMT 2014
On Wed, Jun 25, 2014 at 11:12 AM, Bernd Edlinger
<bernd.edlinger@hotmail.de> wrote:
> Hi,
>
> this is part 2 of my patch, which uses the undefined behaviour, and emits a strict overflow warning.
> This fixes gnat.dg/opt37.adb again.
>
> The diff is relative to part 1: https://gcc.gnu.org/ml/gcc-patches/2014-06/msg01891.html
>
>
> Boot-strapped and regression-tested on x86_64-linux-gnu.
>
> OK for trunk?
+ /* For integer types, if A has a smaller type
+ than T the result depends on the possible
+ overflow in P + A.
+ E.g. T=size_t, A=(unsigned)429497295, P>0.
+ However, if an overflow in P + A would cause
+ undefined behavior, we can assume that there
+ is no overflow. */
+ || (!POINTER_TYPE_P (TREE_TYPE (p))
+ && INTEGRAL_TYPE_P (TREE_TYPE (a))
+ && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (a)))
it's clearer to simply test INTEGRAL_TYPE_P (TREE_TYPE (p)), that
way we know that A is also integral type. For consistency then
check TYPE_OVERFLOW_UNDEFINED on p as well.
+ if (issue_strict_overflow_warning
+ (WARN_STRICT_OVERFLOW_MISC)
+ && TYPE_PRECISION (TREE_TYPE (rhs1))
+ > TYPE_PRECISION (TREE_TYPE (a))
+ && !POINTER_TYPE_P (TREE_TYPE (p)))
+ warning_at (gimple_location (stmt),
likewise here, check for INTEGRAL_TYPE_P (p).
Ok with that change.
Thanks,
Richard.
>
> Thanks
> Bernd.
>
More information about the Gcc-patches
mailing list