print-tree.c (print_node): Print base for OFFSET_TYPEs.
authorJason Merrill <jason@yorick.cygnus.com>
Mon, 9 Aug 1999 08:52:48 +0000 (08:52 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 9 Aug 1999 08:52:48 +0000 (04:52 -0400)
* 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

gcc/ChangeLog
gcc/except.c
gcc/print-tree.c
gcc/stmt.c

index 1eccc50af86017d0cdb4a8332ba25db1e5f292c0..19cb0269b538b7d9875afe43ab4efbd60f10ef2f 100644 (file)
@@ -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
index 85fb0ac9145b4a4a5a9343fa856414b1050a9033..40e912f9767d0ffb6185a0c1babc9d2cfb76122f 100644 (file)
@@ -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);
     }
 }
index 18ec9295d614a7bf793f7bcfd27f8a312ea24e0d..82e648dfd3eed47dced9b940479e4089a59dd1d6 100644 (file)
@@ -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);
 
index 62cfee0daf96276ec6c4d3865f3b076239d58742..12c5b5b59e691beb613b66347840e2064821d58e 100644 (file)
@@ -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