From 5a5cccaa4e00fd06fd8e8bf4e9f731dbda799dd3 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell <nathan@gcc.gnu.org> Date: Mon, 30 Dec 2002 12:46:13 +0000 Subject: [PATCH] re PR c++/9054 (segfault on legal code with option -fdump-translation-unit) 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 | 1 + gcc/cp/dump.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 32f49a7bb116..85d6d2addd75 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 fa55833e2089..da207d32917f 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"); -- GitLab