diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-06-08 22:57:23 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-06-08 22:57:23 +0000 |
commit | 572fdaa33c3e33d9d62c123bb1ef6d4dbbceb7c1 (patch) | |
tree | 5b4a3c5fe99a1829465bacb4e9a83edad3fa2fdb /gcc/except.c | |
parent | 43d18c77ad95d45cefc5441037e518cf16fa38d1 (diff) | |
download | gcc-572fdaa33c3e33d9d62c123bb1ef6d4dbbceb7c1.tar.gz |
* except.c (get_exception_pointer, get_exception_filter): Take a
struct function. Update all callers.
* except.h (get_exception_pointer): Update declaration.
* expr.c (expand_expr): Update get_exception_pointer call.
* integrate.c (expand_inline_function): Remap the exception pointer
from callee to caller.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43060 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/except.c')
-rw-r--r-- | gcc/except.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/gcc/except.c b/gcc/except.c index 24e70799de7..6e90fe4e6ab 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -256,7 +256,7 @@ static tree lookup_type_for_runtime PARAMS ((tree)); static struct eh_region *expand_eh_region_end PARAMS ((void)); -static rtx get_exception_filter PARAMS ((void)); +static rtx get_exception_filter PARAMS ((struct function *)); static void collect_eh_region_array PARAMS ((void)); static void resolve_fixup_regions PARAMS ((void)); @@ -720,9 +720,9 @@ expand_eh_region_end_cleanup (handler) /* In case this cleanup involves an inline destructor with a try block in it, we need to save the EH return data registers around it. */ data_save[0] = gen_reg_rtx (Pmode); - emit_move_insn (data_save[0], get_exception_pointer ()); + emit_move_insn (data_save[0], get_exception_pointer (cfun)); data_save[1] = gen_reg_rtx (word_mode); - emit_move_insn (data_save[1], get_exception_filter ()); + emit_move_insn (data_save[1], get_exception_filter (cfun)); expand_expr (handler, const0_rtx, VOIDmode, 0); @@ -951,13 +951,14 @@ expand_eh_region_end_fixup (handler) within a handler. */ rtx -get_exception_pointer () +get_exception_pointer (fun) + struct function *fun; { - rtx exc_ptr = cfun->eh->exc_ptr; - if (! exc_ptr) + rtx exc_ptr = fun->eh->exc_ptr; + if (fun == cfun && ! exc_ptr) { exc_ptr = gen_reg_rtx (Pmode); - cfun->eh->exc_ptr = exc_ptr; + fun->eh->exc_ptr = exc_ptr; } return exc_ptr; } @@ -966,13 +967,14 @@ get_exception_pointer () within a handler. */ static rtx -get_exception_filter () +get_exception_filter (fun) + struct function *fun; { - rtx filter = cfun->eh->filter; - if (! filter) + rtx filter = fun->eh->filter; + if (fun == cfun && ! filter) { filter = gen_reg_rtx (word_mode); - cfun->eh->filter = filter; + fun->eh->filter = filter; } return filter; } @@ -2356,8 +2358,8 @@ finish_eh_generation () /* These registers are used by the landing pads. Make sure they have been generated. */ - get_exception_pointer (); - get_exception_filter (); + get_exception_pointer (cfun); + get_exception_filter (cfun); /* Construct the landing pads. */ |