search.c (is_subobject_of_p): Make sure we're looking at the right baseclasses.

* search.c (is_subobject_of_p): Make sure we're looking at the
	right baseclasses.

From-SVN: r26669
This commit is contained in:
Mark Mitchell 1999-04-27 00:02:52 +00:00 committed by Mark Mitchell
parent 93dfdf16a5
commit 86eab6f69a
3 changed files with 47 additions and 1 deletions

View File

@ -1,3 +1,8 @@
1999-04-26 Mark Mitchell <mark@codesourcery.com>
* search.c (is_subobject_of_p): Make sure we're looking at the
right baseclasses.
1999-04-26 Marc Espie <espie@cvs.openbsd.org>
* Make-lang.in (cplib2.ready): Don't depend on phony targets.

View File

@ -1065,13 +1065,17 @@ is_subobject_of_p (parent, binfo)
tree binfos;
int i, n_baselinks;
/* We want to canonicalize for comparison purposes. But, when we
iterate through basetypes later, we want the binfos from the
original hierarchy. That's why we have to calculate BINFOS
first, and then canonicalize. */
binfos = BINFO_BASETYPES (binfo);
parent = canonical_binfo (parent);
binfo = canonical_binfo (binfo);
if (parent == binfo)
return 1;
binfos = BINFO_BASETYPES (binfo);
n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
/* Process and/or queue base types. */

View File

@ -0,0 +1,37 @@
// Build don't link:
// Origin: Benjamin Kosnik <bkoz@cygnus.com>
class b
{
int j;
public:
b(int a = 6): j(a) {}
void imbue(int a) {++j;}
};
class d: public b
{
int k;
public:
d(int a = 7): b(a), k(a) {}
void imbue(int a) {++k;}
};
//virtual public kills, public ok
class mostd: virtual public d
{
int l;
public:
mostd(int a = 9): d(a), l(a) {}
};
int main() {
d dobj;
dobj.imbue(5);
mostd mobj;
mobj.imbue(5);
return 0;
}