1 struct A 2 { 3 virtual void foo(); 4 virtual void bar(); 5 }; 6 7 void A::foo() { } // lose 8 void A::bar() { } // keep 9 10 struct B : public A 11 { 12 virtual void foo(); 13 }; 14 15 void B::foo() { } // lose 16 17 void _start() __asm__("_start"); // keep 18 void start() __asm__("start"); // some toolchains use this name. 19 20 A a; // keep 21 B b; 22 A *getme() { return &a; } // keep 23 24 extern B* dropme2(); 25 void dropme1() { dropme2()->foo(); } // lose 26 B *dropme2() { return &b; } // lose 27 28 void _start() 29 { 30 getme()->bar(); 31 } 32 33 void start () 34 { 35 _start (); 36 } 37 38 extern "C" void __main() { } 39