https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63665
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- To better bisect this also use -fno-tree-copy-prop (which otherwise hides this on the 4.9 branch for example). It's forwprop that does the bogus transform on y_5 = -2147483648; _6 = y_5 + -2147483648; which ends up calling fold_binary (NE_EXPR, y_5 + -2147483648, 0) which computes it as 1. 8769 tree new_const = int_const_binop (reverse_op, const2, const1); results in -2147483648(OVF) even though we have -fwrapv in effect which the triggers /* If the constant operation overflowed this can be simplified as a comparison against INT_MAX/INT_MIN. */ if (TREE_OVERFLOW (new_const)) { without changing how we compute TREE_OVERFLOW it seems that this test needs to be guarded with !TYPE_OVERFLOW_WRAPS ().