[PATCH] Fix forwprop pattern (T)(P + A) - (T)P - (T)A, Part 2

2014-06-25 Thread Bernd Edlinger
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?


Thanks
Bernd.
  2014-06-25  Bernd Edlinger  bernd.edlin...@hotmail.de

* tree-ssa-forwprop.c (associate_plusminus): For widening conversions
check for undefined overflow in (T)(P + A) - (T)P - (T)A.
Issue a strict overflow warning if appropriate.



patch-forwprop2.diff
Description: Binary data


Re: [PATCH] Fix forwprop pattern (T)(P + A) - (T)P - (T)A, Part 2

2014-06-25 Thread Richard Biener
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, P0.
+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.