diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2009-09-27 12:36:43 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2009-09-27 12:36:43 +0000 |
commit | ffaf6f258a248a8c90267455c0e681ac1fb5345c (patch) | |
tree | 66dacc33dc02bdfc687cd79b0deb3eb58a538bdd /gcc | |
parent | 464778c074aa55ea8d41713fc160a48c9e0df305 (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fold-const.c | 16 | ||||
-rw-r--r-- | gcc/stor-layout.c | 9 |
3 files changed, 20 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 08a46fc..cbe3820 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-09-27 Eric Botcazou <ebotcazou@adacore.com> + + * 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. + 2009-09-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * Makefile.in (TOPLEV_H): Use $(INPUT_H) not input.h. 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; diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 18360bb..f34f2ab 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1968,15 +1968,6 @@ layout_type (tree type) TREE_TYPE (lb), ub, lb))); - /* If neither bound is a constant and sizetype is signed, make - sure the size is never negative. We should really do this - if *either* bound is non-constant, but this is the best - compromise between C and Ada. */ - if (!TYPE_UNSIGNED (sizetype) - && TREE_CODE (TYPE_MIN_VALUE (index)) != INTEGER_CST - && TREE_CODE (TYPE_MAX_VALUE (index)) != INTEGER_CST) - length = size_binop (MAX_EXPR, length, size_zero_node); - TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size, fold_convert (bitsizetype, length)); |