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
This commit is contained in:
parent
05bb5b0630
commit
dd64a6f7c8
4 changed files with 27 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2012-11-07 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR middle-end/55219
|
||||
* fold-const.c (fold_binary_op_with_conditional_arg): Do not fold if
|
||||
the argument is itself a conditional expression.
|
||||
|
||||
2012-11-07 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/55122
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2012-11-07 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc.c-torture/compile/20121107-1.c: New test.
|
||||
|
||||
2012-11-07 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/55151
|
||||
|
|
14
gcc/testsuite/gcc.c-torture/compile/20121107-1.c
Normal file
14
gcc/testsuite/gcc.c-torture/compile/20121107-1.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* PR middle-end/55219 */
|
||||
/* Testcase by Markus Trippelsdorf <markus@trippelsdorf.de> */
|
||||
|
||||
int x, c, d, e, f, g, h, i;
|
||||
double j;
|
||||
const int k;
|
||||
const enum { B } a;
|
||||
void
|
||||
fn1 (void)
|
||||
{
|
||||
h = (g ? c : g ? f : g ? e : g ? i : g ? f : g ? e : g ? d : x)
|
||||
+ (a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a
|
||||
? j : a ? : 0 ? : a ? : a ? : a ? : a ? : a ? : a ? k : a ? : x);
|
||||
}
|
Loading…
Add table
Reference in a new issue