From e62d4117271aaaa0802f46cd3cef48b70e87f506 Mon Sep 17 00:00:00 2001 From: rth Date: Wed, 24 Jul 2002 22:05:19 +0000 Subject: [PATCH] * expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR form when not optimizing. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55723 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 590e422..d80a5f7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-07-24 Richard Henderson + + * expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR + form when not optimizing. + 2002-07-24 David Mosberger * config/ia64/ia64.c (gen_thread_pointer): Fix typo in marking diff --git a/gcc/expr.c b/gcc/expr.c index e70bf90..1b880c1 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -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 (); -- 2.7.4