diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-11-07 22:26:02 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2012-11-07 22:26:02 +0000 |
commit | dd64a6f7c8165c204b3cc2f353562df0b6bf335d (patch) | |
tree | 74bd2163ff68dcf5d867b4f057ef2ecff1bc162a /gcc/fold-const.c | |
parent | 05bb5b0630a9460d8888c1be83298f27d93e462c (diff) | |
download | gcc-dd64a6f7c8165c204b3cc2f353562df0b6bf335d.zip gcc-dd64a6f7c8165c204b3cc2f353562df0b6bf335d.tar.gz gcc-dd64a6f7c8165c204b3cc2f353562df0b6bf335d.tar.bz2 |
re PR middle-end/55219 (memory explosion on nested conditional expressions)
PR middle-end/55219
* fold-const.c (fold_binary_op_with_conditional_arg): Do not fold if
the argument is itself a conditional expression.
From-SVN: r193312
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 62a4e21..4fa1fd6 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -5987,10 +5987,11 @@ fold_binary_op_with_conditional_arg (location_t loc, cond_code = VEC_COND_EXPR; /* This transformation is only worthwhile if we don't have to wrap ARG - in a SAVE_EXPR and the operation can be simplified on at least one - of the branches once its pushed inside the COND_EXPR. */ + in a SAVE_EXPR and the operation can be simplified without recursing + on at least one of the branches once its pushed inside the COND_EXPR. */ if (!TREE_CONSTANT (arg) && (TREE_SIDE_EFFECTS (arg) + || TREE_CODE (arg) == COND_EXPR || TREE_CODE (arg) == VEC_COND_EXPR || TREE_CONSTANT (true_value) || TREE_CONSTANT (false_value))) return NULL_TREE; |