re PR c++/9054 (segfault on legal code with option -fdump-translation-unit)
authorNathan Sidwell <nathan@gcc.gnu.org>
Mon, 30 Dec 2002 12:46:13 +0000 (12:46 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Mon, 30 Dec 2002 12:46:13 +0000 (12:46 +0000)
PR c++/9054
* class.c (layout_class_type): Set DECL_CONTEXT of type for base.
* dump.c (cp_dump_tree, RECORD_TYPE): Deal with type for base types.

From-SVN: r60627

gcc/cp/class.c
gcc/cp/dump.c

index 32f49a7..85d6d2a 100644 (file)
@@ -5161,6 +5161,7 @@ layout_class_type (tree t, tree *virtuals_p)
 
       /* Record the base version of the type.  */
       CLASSTYPE_AS_BASE (t) = base_t;
+      TYPE_CONTEXT (base_t) = t;
     }
   else
     CLASSTYPE_AS_BASE (t) = t;
index fa55833..da207d3 100644 (file)
@@ -265,6 +265,14 @@ cp_dump_tree (dump_info, t)
          return 1;
        }
 
+      /* Is it a type used as a base? */
+      if (TYPE_CONTEXT (t) && TREE_CODE (TYPE_CONTEXT (t)) == TREE_CODE (t)
+         && CLASSTYPE_AS_BASE (TYPE_CONTEXT (t)) == t)
+       {
+         dump_child ("bfld", TYPE_CONTEXT (t));
+         return 1;
+       }
+      
       dump_child ("vfld", TYPE_VFIELD (t));
       if (CLASSTYPE_TEMPLATE_SPECIALIZATION(t))
         dump_string(di, "spec");