From f54a7f6fe2ad7880795807b573192edafe5e046d Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Sun, 12 Dec 1999 18:32:36 +0000 Subject: except.h (struct eh_queue): Add `next' pointer. * except.h (struct eh_queue): Add `next' pointer. (struct eh_status): Make x_ehqueue a pointer. (push_ehqueue): Declare. (pop_ehqueue): Likewise. * except.c (expand_eh_region_end): Adjust now that ehqueue is a pointer. (expand_fixup_region_end): Likewise. (expand_leftover_cleanups): Likewise. (push_ehqueue): Define. (pop_ehqueue): Likewise. (emit_cleanup_handler): Use push_ehqueue and pop_ehqueue rather than doing it inline. (expand_start_all_catch): Adjust now that ehqueue is a pointer. (mark_eh_queue): Mark all level of the queue. (mark_eh_status): Adjust now that ehqueue is a pointer. (init_eh_for_function): Allocate ehqueue. (free_eh_status): Free it. * stmt.c (expand_cleanups): Save the ehqueue around the cleanup expansion for a fixup. From-SVN: r30874 --- gcc/stmt.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gcc/stmt.c') diff --git a/gcc/stmt.c b/gcc/stmt.c index 6137d66..8256646 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -4270,7 +4270,11 @@ expand_cleanups (list, dont_do, in_fixup, reachable) if (protect) expand_fixup_region_start (); + /* The cleanup might contain try-blocks, so we have to + preserve our current queue. */ + push_ehqueue (); expand_expr (TREE_VALUE (tail), const0_rtx, VOIDmode, 0); + pop_ehqueue (); if (protect) expand_fixup_region_end (TREE_VALUE (tail)); free_temp_slots (); -- cgit v1.1