Hi, here is even better testcase (in a sense that my patch does not solve the wrong code issue)
Compile with ./xgcc -B ./ -O3 ~/t.C -S -fno-partial-inlining
-fno-early-inlining -fdump-ipa-all -fdump-tree-all -fipa-cp -fno-ipa-sra
Here the sequence is bit different. Here we have contstruction table store
done within destructor that
sets it accoridng to the second parameter. We hover still produce PASSTHROUGH
function for it and
we end up propagating the wrong type.
Honza
#include <stdlib.h>
class A {
public:
unsigned length;
};
class B {};
class MultiTermDocs : public virtual B {
protected:
A readerTermDocs;
A subReaders;
virtual B *m_fn1(int *) {}
virtual inline ~MultiTermDocs();
void wrap(void)
{
m_fn1(NULL);
}
};
class C : MultiTermDocs {
B *m_fn1(int *);
};
MultiTermDocs::~MultiTermDocs() {
wrap ();
if (&readerTermDocs) {
B *a;
for (unsigned i = 0; i < subReaders.length; i++)
(a != 0);
}
}
B *C::m_fn1(int *) { abort (); }
main()
{
class C c;
}
