aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2009-09-27 12:36:43 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2009-09-27 12:36:43 +0000
commitffaf6f258a248a8c90267455c0e681ac1fb5345c (patch)
tree66dacc33dc02bdfc687cd79b0deb3eb58a538bdd /gcc/fold-const.c
parent464778c074aa55ea8d41713fc160a48c9e0df305 (diff)
downloadgcc-ffaf6f258a248a8c90267455c0e681ac1fb5345c.zip
gcc-ffaf6f258a248a8c90267455c0e681ac1fb5345c.tar.gz
gcc-ffaf6f258a248a8c90267455c0e681ac1fb5345c.tar.bz2
fold-const.c (maybe_lvalue_p): Return false for M(IN|AX)_EXPR.
* fold-const.c (maybe_lvalue_p): Return false for M(IN|AX)_EXPR. (extract_muldiv_1) <MINUS_EXPR>: Swap operands if necessary. * stor-layout.c (layout_type) <ARRAY_TYPE>: Do not take the maximum of the length and zero. From-SVN: r152217
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index d754bee..b080d85 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -2830,8 +2830,6 @@ maybe_lvalue_p (const_tree x)
case TARGET_EXPR:
case COND_EXPR:
case BIND_EXPR:
- case MIN_EXPR:
- case MAX_EXPR:
break;
default:
@@ -6512,7 +6510,19 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
/* If this was a subtraction, negate OP1 and set it to be an addition.
This simplifies the logic below. */
if (tcode == MINUS_EXPR)
- tcode = PLUS_EXPR, op1 = negate_expr (op1);
+ {
+ tcode = PLUS_EXPR, op1 = negate_expr (op1);
+ /* If OP1 was not easily negatable, the constant may be OP0. */
+ if (TREE_CODE (op0) == INTEGER_CST)
+ {
+ tree tem = op0;
+ op0 = op1;
+ op1 = tem;
+ tem = t1;
+ t1 = t2;
+ t2 = tem;
+ }
+ }
if (TREE_CODE (op1) != INTEGER_CST)
break;