diff options
author | Richard Henderson <rth@redhat.com> | 2002-07-24 15:05:19 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-07-24 15:05:19 -0700 |
commit | 8ad8135aa470596753f2c8ea82468418dc349cad (patch) | |
tree | c4bc272bd6a465210b3a6e6557304dc51ce673c4 /gcc/expr.c | |
parent | dc44a4d856ada5c6796fa65dedb29e61b839c6b3 (diff) | |
download | gcc-8ad8135aa470596753f2c8ea82468418dc349cad.zip gcc-8ad8135aa470596753f2c8ea82468418dc349cad.tar.gz gcc-8ad8135aa470596753f2c8ea82468418dc349cad.tar.bz2 |
expr.c (expand_expr): Use GOTO_SUBROUTINE_EXPR form when not optimizing.
* expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR
form when not optimizing.
From-SVN: r55723
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -8966,12 +8966,18 @@ expand_expr (exp, target, tmode, modifier) tree try_block = TREE_OPERAND (exp, 0); tree finally_block = TREE_OPERAND (exp, 1); - if (unsafe_for_reeval (finally_block) > 1) + if (!optimize || unsafe_for_reeval (finally_block) > 1) { /* In this case, wrapping FINALLY_BLOCK in an UNSAVE_EXPR is not sufficient, so we cannot expand the block twice. So we play games with GOTO_SUBROUTINE_EXPR to let us expand the thing only once. */ + /* When not optimizing, we go ahead with this form since + (1) user breakpoints operate more predictably without + code duplication, and + (2) we're not running any of the global optimizers + that would explode in time/space with the highly + connected CFG created by the indirect branching. */ rtx finally_label = gen_label_rtx (); rtx done_label = gen_label_rtx (); |