From: Jason Merrill Date: Mon, 3 Dec 2001 02:43:18 +0000 (-0500) Subject: class.c (finish_vtbls): Fill in BINFO_VPTR_FIELD in the immediate binfos for our... X-Git-Tag: prereleases/libstdc++-3.0.95~571 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ff6685064f4ecab0bcb1b89bb88f6ed2ef9b4ef1;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2b6914bdfd8f..eaa3a9ba4d61 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 736273b8c96e..0513c7eed28e 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)); }