re PR c++/44535 (g++ -O[ 23] generates undefined symbol)
2010-06-28 Martin Jambor <mjambor@suse.cz> PR c++/44535 * gimple-fold.c (get_first_base_binfo_with_virtuals): New function. (gimple_get_relevant_ref_binfo): Use get_first_base_binfo_with_virtuals instead of BINFO_BASE_BINFO. * testsuite/g++.dg/torture/pr44535.C: New test. From-SVN: r161498
This commit is contained in:
parent
fe2ef088e0
commit
621f418948
|
@ -1,3 +1,10 @@
|
|||
2010-06-28 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR c++/44535
|
||||
* gimple-fold.c (get_first_base_binfo_with_virtuals): New function.
|
||||
(gimple_get_relevant_ref_binfo): Use get_first_base_binfo_with_virtuals
|
||||
instead of BINFO_BASE_BINFO.
|
||||
|
||||
2010-06-28 Michael Matz <matz@suse.de>
|
||||
|
||||
PR middle-end/44592
|
||||
|
|
|
@ -1476,6 +1476,22 @@ gimple_fold_builtin (gimple stmt)
|
|||
return result;
|
||||
}
|
||||
|
||||
/* Return the first of the base binfos of BINFO that has virtual functions. */
|
||||
|
||||
static tree
|
||||
get_first_base_binfo_with_virtuals (tree binfo)
|
||||
{
|
||||
int i;
|
||||
tree base_binfo;
|
||||
|
||||
for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
|
||||
if (BINFO_VIRTUALS (base_binfo))
|
||||
return base_binfo;
|
||||
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
|
||||
/* Search for a base binfo of BINFO that corresponds to TYPE and return it if
|
||||
it is found or NULL_TREE if it is not. */
|
||||
|
||||
|
@ -1531,8 +1547,8 @@ gimple_get_relevant_ref_binfo (tree ref, tree known_binfo)
|
|||
|| BINFO_N_BASE_BINFOS (binfo) == 0)
|
||||
return NULL_TREE;
|
||||
|
||||
base_binfo = BINFO_BASE_BINFO (binfo, 0);
|
||||
if (BINFO_TYPE (base_binfo) != TREE_TYPE (field))
|
||||
base_binfo = get_first_base_binfo_with_virtuals (binfo);
|
||||
if (base_binfo && BINFO_TYPE (base_binfo) != TREE_TYPE (field))
|
||||
{
|
||||
tree d_binfo;
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2010-06-28 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR c++/44535
|
||||
* g++.dg/torture/pr44535.C: New test.
|
||||
|
||||
2010-06-28 Michael Matz <matz@suse.de>
|
||||
|
||||
PR middle-end/44592
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/* { dg-do run } */
|
||||
|
||||
namespace FOO {
|
||||
|
||||
template <typename T>
|
||||
class A
|
||||
{
|
||||
public:
|
||||
void Enum();
|
||||
virtual void OnProv() = 0;
|
||||
virtual ~A() { }
|
||||
};
|
||||
typedef A<char> B;
|
||||
|
||||
template<typename T>
|
||||
void A<T>::Enum ()
|
||||
{
|
||||
OnProv ();
|
||||
}
|
||||
} // namespace FOO
|
||||
|
||||
class C {};
|
||||
|
||||
class D: public C, public FOO::B {
|
||||
public:
|
||||
void OnProv() {}
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
D x;
|
||||
x.Enum();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue