Blame SOURCES/gcc48-pr80362.patch

5ed81e
2017-09-18  Richard Biener  <rguenther@suse.de>
5ed81e
5ed81e
	Backport from mainline
5ed81e
	2017-04-10  Richard Biener  <rguenther@suse.de>
5ed81e
5ed81e
	PR middle-end/80362
5ed81e
	* fold-const.c (fold_binary_loc): Look at unstripped ops when
5ed81e
	looking for NEGATE_EXPR in -A / -B to A / B folding.
5ed81e
5ed81e
	* gcc.dg/torture/pr80362.c: New testcase.
5ed81e
5ed81e
--- gcc/fold-const.c
5ed81e
+++ gcc/fold-const.c
5ed81e
@@ -11940,8 +11942,8 @@ fold_binary_loc (location_t loc,
5ed81e
       /* Convert -A / -B to A / B when the type is signed and overflow is
5ed81e
 	 undefined.  */
5ed81e
       if ((!INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_UNDEFINED (type))
5ed81e
-	  && TREE_CODE (arg0) == NEGATE_EXPR
5ed81e
-	  && negate_expr_p (arg1))
5ed81e
+	  && TREE_CODE (op0) == NEGATE_EXPR
5ed81e
+	  && negate_expr_p (op1))
5ed81e
 	{
5ed81e
 	  if (INTEGRAL_TYPE_P (type))
5ed81e
 	    fold_overflow_warning (("assuming signed overflow does not occur "
5ed81e
--- /dev/null
5ed81e
+++ gcc/testsuite/gcc.dg/torture/pr80362.c
5ed81e
@@ -0,0 +1,11 @@
5ed81e
+/* { dg-do run } */
5ed81e
+/* { dg-additional-options "-fstrict-overflow" } */
5ed81e
+
5ed81e
+int main()
5ed81e
+{
5ed81e
+  signed char var_0, var_1 = -128;
5ed81e
+  var_0 = (signed char)(-var_1) / 3;
5ed81e
+  if (var_0 > 0)
5ed81e
+    __builtin_abort();
5ed81e
+  return 0;
5ed81e
+}