mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-05 00:39:58 +08:00
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>
|
||||
|
||||
* tree.c (build_exception_variant): Fix typo: use the chain of U,
|
||||
|
@ -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;
|
||||
}
|
||||
|
19
gcc/testsuite/g++.old-deja/g++.pt/crash40.C
Normal file
19
gcc/testsuite/g++.old-deja/g++.pt/crash40.C
Normal 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()
|
||||
{
|
||||
}
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue
Block a user