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:
parent
75c437de06
commit
d2675b98f5
|
@ -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>
|
1999-04-22 Brendan Kehoe <brendan@cygnus.com>
|
||||||
|
|
||||||
* tree.c (build_exception_variant): Fix typo: use the chain of U,
|
* tree.c (build_exception_variant): Fix typo: use the chain of U,
|
||||||
|
|
|
@ -1062,21 +1062,27 @@ static int
|
||||||
is_subobject_of_p (parent, binfo)
|
is_subobject_of_p (parent, binfo)
|
||||||
tree parent, binfo;
|
tree parent, binfo;
|
||||||
{
|
{
|
||||||
tree binfos = BINFO_BASETYPES (binfo);
|
tree binfos;
|
||||||
int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
|
int i, n_baselinks;
|
||||||
|
|
||||||
if (TREE_VIA_VIRTUAL (parent))
|
parent = canonical_binfo (parent);
|
||||||
parent = TYPE_BINFO (TREE_TYPE (parent));
|
binfo = canonical_binfo (binfo);
|
||||||
if (TREE_VIA_VIRTUAL (binfo))
|
|
||||||
binfo = TYPE_BINFO (TREE_TYPE (binfo));
|
|
||||||
|
|
||||||
if (parent == binfo)
|
if (parent == binfo)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
binfos = BINFO_BASETYPES (binfo);
|
||||||
|
n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
|
||||||
|
|
||||||
/* Process and/or queue base types. */
|
/* Process and/or queue base types. */
|
||||||
for (i = 0; i < n_baselinks; i++)
|
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))
|
if (is_subobject_of_p (parent, base_binfo))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in New Issue