Commit e7b9b18e by Jason Merrill Committed by Jason Merrill

print-tree.c (print_node): Print base for OFFSET_TYPEs.

	* 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.

From-SVN: r28621
parent a124a0ca
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) Mon Aug 9 01:15:24 1999 Jeffrey A Law (law@cygnus.com)
* pa.h (HARD_REGNO_MODE_OK): Correctly handle FPregs, even when * pa.h (HARD_REGNO_MODE_OK): Correctly handle FPregs, even when
......
/* Implements exception handling. /* 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>. Contributed by Mike Stump <mrs@cygnus.com>.
This file is part of GNU CC. This file is part of GNU CC.
...@@ -1400,13 +1400,9 @@ expand_eh_region_start_for_decl (decl) ...@@ -1400,13 +1400,9 @@ expand_eh_region_start_for_decl (decl)
if (! doing_eh (0)) if (! doing_eh (0))
return; return;
if (exceptions_via_longjmp)
{
/* We need a new block to record the start and end of the /* We need a new block to record the start and end of the
dynamic handler chain. We could always do this, but we dynamic handler chain. We also want to prevent jumping into
really want to permit jumping into such a block, and we want a try block. */
to avoid any errors or performance impact in the SJ EH code
for now. */
expand_start_bindings (0); expand_start_bindings (0);
/* But we don't need or want a new temporary level. */ /* But we don't need or want a new temporary level. */
...@@ -1417,6 +1413,8 @@ expand_eh_region_start_for_decl (decl) ...@@ -1417,6 +1413,8 @@ expand_eh_region_start_for_decl (decl)
automatically. */ automatically. */
mark_block_as_eh_region (); mark_block_as_eh_region ();
if (exceptions_via_longjmp)
{
/* Arrange for returns and gotos to pop the entry we make on the /* Arrange for returns and gotos to pop the entry we make on the
dynamic handler stack. */ dynamic handler stack. */
expand_dhc_cleanup (decl); expand_dhc_cleanup (decl);
...@@ -1489,8 +1487,7 @@ expand_eh_region_end (handler) ...@@ -1489,8 +1487,7 @@ expand_eh_region_end (handler)
enqueue_eh_entry (&ehqueue, entry); enqueue_eh_entry (&ehqueue, entry);
/* If we have already started ending the bindings, don't recurse. /* If we have already started ending the bindings, don't recurse. */
This only happens when exceptions_via_longjmp is true. */
if (is_eh_region ()) if (is_eh_region ())
{ {
/* Because we don't need or want a new temporary level and /* Because we don't need or want a new temporary level and
...@@ -1501,7 +1498,6 @@ expand_eh_region_end (handler) ...@@ -1501,7 +1498,6 @@ expand_eh_region_end (handler)
mark_block_as_not_eh_region (); mark_block_as_not_eh_region ();
/* Maybe do this to prevent jumping in and so on... */
expand_end_bindings (NULL_TREE, 0, 0); expand_end_bindings (NULL_TREE, 0, 0);
} }
} }
......
/* Prints out tree in human readable form - GNU C-compiler /* 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. This file is part of GNU CC.
...@@ -514,6 +514,9 @@ print_node (file, prefix, node, indent) ...@@ -514,6 +514,9 @@ print_node (file, prefix, node, indent)
print_node_brief (file, "method basetype", TYPE_METHOD_BASETYPE (node), indent + 4); print_node_brief (file, "method basetype", TYPE_METHOD_BASETYPE (node), indent + 4);
print_node (file, "arg-types", TYPE_ARG_TYPES (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)) if (TYPE_CONTEXT (node))
print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4); print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4);
......
...@@ -3124,7 +3124,8 @@ mark_block_as_not_eh_region () ...@@ -3124,7 +3124,8 @@ mark_block_as_not_eh_region ()
int int
is_eh_region () 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 /* Given a pointer to a BLOCK node, save a pointer to the most recently
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment