summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-09 08:52:48 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-09 08:52:48 +0000
commit777ddd595760c079342b4237a5117dfa92299fbc (patch)
treefb0ee7af44f5b1bdf92221730645ce1dbccf3736 /gcc
parent627c5754e3cba54636c2629a7eba737856b5e210 (diff)
downloadgcc-777ddd595760c079342b4237a5117dfa92299fbc.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28621 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/except.c32
-rw-r--r--gcc/print-tree.c5
-rw-r--r--gcc/stmt.c3
4 files changed, 27 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1eccc50af86..19cb0269b53 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 85fb0ac9145..40e912f9767 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 18ec9295d61..82e648dfd3e 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);
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 62cfee0daf9..12c5b5b59e6 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -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