From ff6685064f4ecab0bcb1b89bb88f6ed2ef9b4ef1 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sun, 2 Dec 2001 21:43:18 -0500 Subject: [PATCH] class.c (finish_vtbls): Fill in BINFO_VPTR_FIELD in the immediate binfos for our virtual bases. * class.c (finish_vtbls): Fill in BINFO_VPTR_FIELD in the immediate binfos for our virtual bases. From-SVN: r47543 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/class.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2b6914bdfd8..eaa3a9ba4d6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-12-03 Jason Merrill + + * class.c (finish_vtbls): Fill in BINFO_VPTR_FIELD in the + immediate binfos for our virtual bases. + 2001-12-02 Neil Booth * call.c (build_java_interface_fn_ref): Similarly. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 736273b8c96..0513c7eed28 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -6789,6 +6789,7 @@ finish_vtbls (t) { tree list; tree vbase; + int i; /* We lay out the primary and secondary vtables in one contiguous vtable. The primary vtable is first, followed by the non-virtual @@ -6813,6 +6814,18 @@ finish_vtbls (t) TYPE_BINFO (t), t, list); } + /* Fill in BINFO_VPTR_FIELD in the immediate binfos for our virtual + base classes, for the benefit of the debugging backends. */ + for (i = 0; i < BINFO_N_BASETYPES (TYPE_BINFO (t)); ++i) + { + tree base = BINFO_BASETYPE (TYPE_BINFO (t), i); + if (TREE_VIA_VIRTUAL (base)) + { + tree vbase = binfo_for_vbase (BINFO_TYPE (base), t); + BINFO_VPTR_FIELD (base) = BINFO_VPTR_FIELD (vbase); + } + } + if (TYPE_BINFO_VTABLE (t)) initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list)); } -- 2.30.2