http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59883
--- Comment #1 from Jan Hubicka <hubicka at gcc dot gnu.org> --- The self-recursion testcase is wrong, as can be seen by the following testcase: #include <stdio.h> struct A { virtual int foo (void) {return foo()+1;} }; struct B: public A { virtual int foo (void) {return 1;} }; main() { struct B b; printf("%i\n",b.A::foo()); } Still, given that recursive virtual functions seems frequent, I wonder if we can't try to track such explicit calls that breaks the assumption that a virtual function is called only for derived types that do not overwrite it and try to optimize at least for local functions...