diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/except.c | 32 | ||||
-rw-r--r-- | gcc/print-tree.c | 5 | ||||
-rw-r--r-- | gcc/stmt.c | 3 |
4 files changed, 27 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1eccc50..19cb026 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Mon Aug 9 01:52:24 1999 Jason Merrill <jason@yorick.cygnus.com> + + * print-tree.c (print_node): Print base for OFFSET_TYPEs. + + * except.c (expand_eh_region_start_for_decl): Always start a new block. + * stmt.c (is_eh_region): Make sure current_function is present, too. + Mon Aug 9 01:15:24 1999 Jeffrey A Law (law@cygnus.com) * pa.h (HARD_REGNO_MODE_OK): Correctly handle FPregs, even when diff --git a/gcc/except.c b/gcc/except.c index 85fb0ac..40e912f 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -1,5 +1,5 @@ /* Implements exception handling. - Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc. + Copyright (C) 1989, 1992-1999 Free Software Foundation, Inc. Contributed by Mike Stump <mrs@cygnus.com>. This file is part of GNU CC. @@ -1400,23 +1400,21 @@ expand_eh_region_start_for_decl (decl) if (! doing_eh (0)) return; - if (exceptions_via_longjmp) - { - /* We need a new block to record the start and end of the - dynamic handler chain. We could always do this, but we - really want to permit jumping into such a block, and we want - to avoid any errors or performance impact in the SJ EH code - for now. */ - expand_start_bindings (0); + /* We need a new block to record the start and end of the + dynamic handler chain. We also want to prevent jumping into + a try block. */ + expand_start_bindings (0); - /* But we don't need or want a new temporary level. */ - pop_temp_slots (); + /* But we don't need or want a new temporary level. */ + pop_temp_slots (); - /* Mark this block as created by expand_eh_region_start. This - is so that we can pop the block with expand_end_bindings - automatically. */ - mark_block_as_eh_region (); + /* Mark this block as created by expand_eh_region_start. This + is so that we can pop the block with expand_end_bindings + automatically. */ + mark_block_as_eh_region (); + if (exceptions_via_longjmp) + { /* Arrange for returns and gotos to pop the entry we make on the dynamic handler stack. */ expand_dhc_cleanup (decl); @@ -1489,8 +1487,7 @@ expand_eh_region_end (handler) enqueue_eh_entry (&ehqueue, entry); - /* If we have already started ending the bindings, don't recurse. - This only happens when exceptions_via_longjmp is true. */ + /* If we have already started ending the bindings, don't recurse. */ if (is_eh_region ()) { /* Because we don't need or want a new temporary level and @@ -1501,7 +1498,6 @@ expand_eh_region_end (handler) mark_block_as_not_eh_region (); - /* Maybe do this to prevent jumping in and so on... */ expand_end_bindings (NULL_TREE, 0, 0); } } diff --git a/gcc/print-tree.c b/gcc/print-tree.c index 18ec929..82e648d 100644 --- a/gcc/print-tree.c +++ b/gcc/print-tree.c @@ -1,5 +1,5 @@ /* Prints out tree in human readable form - GNU C-compiler - Copyright (C) 1990, 91, 93-97, 1998 Free Software Foundation, Inc. + Copyright (C) 1990, 91, 93-98, 1999 Free Software Foundation, Inc. This file is part of GNU CC. @@ -514,6 +514,9 @@ print_node (file, prefix, node, indent) print_node_brief (file, "method basetype", TYPE_METHOD_BASETYPE (node), indent + 4); print_node (file, "arg-types", TYPE_ARG_TYPES (node), indent + 4); } + else if (TREE_CODE (node) == OFFSET_TYPE) + print_node_brief (file, "basetype", TYPE_OFFSET_BASETYPE (node), + indent + 4); if (TYPE_CONTEXT (node)) print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4); @@ -3124,7 +3124,8 @@ mark_block_as_not_eh_region () int is_eh_region () { - return block_stack && block_stack->data.block.exception_region; + return (current_function && block_stack + && block_stack->data.block.exception_region); } /* Given a pointer to a BLOCK node, save a pointer to the most recently |