On Wed, Jun 25, 2014 at 11:12 AM, Bernd Edlinger
<bernd.edlin...@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.
>

Reply via email to