summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2002-12-30 12:46:13 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2002-12-30 12:46:13 +0000
commit4b09de30489eadcb49bc9ebfe8d53c22c0e138f5 (patch)
treeeda1a7b14bc3ca30755dbcbff392ba3ee7f3c334
parent0ed1c0eb5f8310c0218f414256a3f691e2951327 (diff)
downloadppe42-gcc-4b09de30489eadcb49bc9ebfe8d53c22c0e138f5.tar.gz
ppe42-gcc-4b09de30489eadcb49bc9ebfe8d53c22c0e138f5.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@60627 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/class.c1
-rw-r--r--gcc/cp/dump.c8
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 32f49a7bb11..85d6d2addd7 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -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;
diff --git a/gcc/cp/dump.c b/gcc/cp/dump.c
index fa55833e208..da207d32917 100644
--- a/gcc/cp/dump.c
+++ b/gcc/cp/dump.c
@@ -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");
OpenPOWER on IntegriCloud