search.c (is_subobject_of_p): Handle TEMPLATE_TYPE_PARMs and such as base classes.

* search.c (is_subobject_of_p): Handle TEMPLATE_TYPE_PARMs and
	such as base classes.

From-SVN: r26601
This commit is contained in:
Mark Mitchell 1999-04-23 10:16:21 +00:00 committed by Mark Mitchell
parent 75c437de06
commit d2675b98f5
3 changed files with 37 additions and 7 deletions

View File

@ -1,3 +1,8 @@
1999-04-23 Mark Mitchell <mark@codesourcery.com>
* search.c (is_subobject_of_p): Handle TEMPLATE_TYPE_PARMs and
such as base classes.
1999-04-22 Brendan Kehoe <brendan@cygnus.com>
* tree.c (build_exception_variant): Fix typo: use the chain of U,

View File

@ -1062,21 +1062,27 @@ static int
is_subobject_of_p (parent, binfo)
tree parent, binfo;
{
tree binfos = BINFO_BASETYPES (binfo);
int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
tree binfos;
int i, n_baselinks;
if (TREE_VIA_VIRTUAL (parent))
parent = TYPE_BINFO (TREE_TYPE (parent));
if (TREE_VIA_VIRTUAL (binfo))
binfo = TYPE_BINFO (TREE_TYPE (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. */
for (i = 0; i < n_baselinks; i++)
{
tree base_binfo = canonical_binfo (TREE_VEC_ELT (binfos, i));
tree base_binfo = TREE_VEC_ELT (binfos, i);
if (!CLASS_TYPE_P (TREE_TYPE (base_binfo)))
/* If we see a TEMPLATE_TYPE_PARM, or some such, as a base
class there's no way to descend into it. */
continue;
if (is_subobject_of_p (parent, base_binfo))
return 1;
}

View File

@ -0,0 +1,19 @@
// Build don't link:
// Origin: rch@larissa.sd.bi.ruhr-uni-bochum.de
template< class X >
struct VB: public virtual X
{};
template< class MOPTerm1, class MOPTerm2 >
struct MOPTermUnify
{
struct MO:
public VB<MOPTerm1>,
public VB<MOPTerm2>
{
void fix()
{
}
};
};