[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