diff options
author | Richard Guenther <rguenther@suse.de> | 2007-11-12 14:16:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-11-12 14:16:05 +0000 |
commit | 916c75b4739db757d1e820be5ba3699848505179 (patch) | |
tree | fb294631ce72ef4c2afc3cd1f59f93a16cf0896a /gcc/fold-const.c | |
parent | 65648dd47e35451645d3f2fb2cdcd02cf43e1d87 (diff) | |
download | gcc-916c75b4739db757d1e820be5ba3699848505179.zip gcc-916c75b4739db757d1e820be5ba3699848505179.tar.gz gcc-916c75b4739db757d1e820be5ba3699848505179.tar.bz2 |
re PR middle-end/34070 (Wrong code for (int)x%4)
2007-11-12 Richard Guenther <rguenther@suse.de>
PR middle-end/34070
* fold-const.c (fold_binary): If testing for non-negative
operands with tree_expr_nonnegative_warnv_p make sure to
use op0 which has all (sign) conversions retained.
* gcc.c-torture/execute/pr34070-1.c: New testcase.
* gcc.c-torture/execute/pr34070-2.c: Likewise.
From-SVN: r130098
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 5b81d88..0d6524e 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -11230,7 +11230,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) strict_overflow_p = false; if (TREE_CODE (arg1) == LSHIFT_EXPR && (TYPE_UNSIGNED (type) - || tree_expr_nonnegative_warnv_p (arg0, &strict_overflow_p))) + || tree_expr_nonnegative_warnv_p (op0, &strict_overflow_p))) { tree sval = TREE_OPERAND (arg1, 0); if (integer_pow2p (sval) && tree_int_cst_sgn (sval) > 0) @@ -11356,7 +11356,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) strict_overflow_p = false; if ((code == TRUNC_MOD_EXPR || code == FLOOR_MOD_EXPR) && (TYPE_UNSIGNED (type) - || tree_expr_nonnegative_warnv_p (arg0, &strict_overflow_p))) + || tree_expr_nonnegative_warnv_p (op0, &strict_overflow_p))) { tree c = arg1; /* Also optimize A % (C << N) where C is a power of 2, |