https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64812
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|i?86-*-* | Status|WAITING |NEW CC| |hubicka at gcc dot gnu.org Component|regression |ipa Known to fail| |5.0 --- Comment #7 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- markus@x4 tmp % cat fmgridif.ii template <class T> class A { T *p; public: A (T *p1) : p (p1) { p->acquire (); } }; class B { public: virtual void acquire (); }; class D : public B { }; class F : B { int mrContext; }; class WindowListenerMultiplexer : F, public D { void acquire () { acquire (); } }; class C { void createPeer () throw (); WindowListenerMultiplexer maWindowListeners; }; class FmXGridPeer { public: void addWindowListener (A<D>); } a; void C::createPeer () throw () { a.addWindowListener (&maWindowListeners); } markus@x4 tmp % g++ -Os -c fmgridif.ii && nm --demangle fmgridif.o | grep WindowListenerMultiplexer U non-virtual thunk to WindowListenerMultiplexer::acquire() markus@x4 tmp % g++ -O2 -c fmgridif.ii && nm --demangle fmgridif.o | grep WindowListenerMultiplexer 0000000000000000 W WindowListenerMultiplexer::acquire() 0000000000000010 W non-virtual thunk to WindowListenerMultiplexer::acquire() Not sure if the devirtualization is valid. Honza?