+2016-05-06 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70941
+ * fold-const.c (split_tree): Always convert to the original type
+ before negating.
+
2016-05-06 Richard Biener <rguenther@suse.de>
* fwprop.c (fwprop): Remove duplicate cleanup_cfg call.
*minus_litp = *litp, *litp = 0;
if (neg_conp_p)
*conp = negate_expr (*conp);
- if (neg_var_p)
+ if (neg_var_p && var)
{
- /* Convert to TYPE before negating a pointer type expr. */
- if (var && POINTER_TYPE_P (TREE_TYPE (var)))
- var = fold_convert_loc (loc, type, var);
+ /* Convert to TYPE before negating. */
+ var = fold_convert_loc (loc, type, var);
var = negate_expr (var);
}
}
else if (*minus_litp)
*litp = *minus_litp, *minus_litp = 0;
*conp = negate_expr (*conp);
- /* Convert to TYPE before negating a pointer type expr. */
- if (var && POINTER_TYPE_P (TREE_TYPE (var)))
- var = fold_convert_loc (loc, type, var);
- var = negate_expr (var);
+ if (var)
+ {
+ /* Convert to TYPE before negating. */
+ var = fold_convert_loc (loc, type, var);
+ var = negate_expr (var);
+ }
}
return var;
+2016-05-06 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70941
+ * gcc.dg/torture/pr70941.c: New testcase.
+
2016-05-05 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/57206
--- /dev/null
+/* { dg-do run } */
+/* { dg-require-effective-target int32plus } */
+
+extern void abort (void);
+
+char a = 0, b = 0, c = 0, d = 0;
+
+int main()
+{
+ a = -(b - 405418259) - ((d && c) ^ 2040097152);
+ if (a != -109)
+ abort();
+ return 0;
+}