aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorMarek Polacek <mpolacek@gcc.gnu.org>2013-12-04 22:47:11 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2013-12-04 22:47:11 +0000
commit31e071aeb827f49ce2e891620852198e99d44a0c (patch)
tree20fca81276f1e6d6224300c11a4e10fa89519d41 /gcc/fold-const.c
parent59b6687cceaf95d8c49afee88248cf4fb0a33105 (diff)
downloadgcc-31e071aeb827f49ce2e891620852198e99d44a0c.zip
gcc-31e071aeb827f49ce2e891620852198e99d44a0c.tar.gz
gcc-31e071aeb827f49ce2e891620852198e99d44a0c.tar.bz2
Implement -fsanitize=signed-integer-overflow.
From-SVN: r205684
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 5cf8ed1..0781bdb 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -10350,14 +10350,16 @@ fold_binary_loc (location_t loc,
case PLUS_EXPR:
/* A + (-B) -> A - B */
- if (TREE_CODE (arg1) == NEGATE_EXPR)
+ if (TREE_CODE (arg1) == NEGATE_EXPR
+ && (flag_sanitize & SANITIZE_SI_OVERFLOW) == 0)
return fold_build2_loc (loc, MINUS_EXPR, type,
fold_convert_loc (loc, type, arg0),
fold_convert_loc (loc, type,
TREE_OPERAND (arg1, 0)));
/* (-A) + B -> B - A */
if (TREE_CODE (arg0) == NEGATE_EXPR
- && reorder_operands_p (TREE_OPERAND (arg0, 0), arg1))
+ && reorder_operands_p (TREE_OPERAND (arg0, 0), arg1)
+ && (flag_sanitize & SANITIZE_SI_OVERFLOW) == 0)
return fold_build2_loc (loc, MINUS_EXPR, type,
fold_convert_loc (loc, type, arg1),
fold_convert_loc (loc, type,