1 struct A 2 { 3 virtual void foo(); 4 virtual void bar(); 5 }; 6 foo()7void A::foo() { } // lose bar()8void A::bar() { } // keep 9 10 struct B : public A 11 { 12 virtual void foo(); 13 }; 14 foo()15void 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; getme()22A *getme() { return &a; } // keep 23 24 extern B* dropme2(); dropme1()25void dropme1() { dropme2()->foo(); } // lose dropme2()26B *dropme2() { return &b; } // lose 27 _start()28void _start() 29 { 30 getme()->bar(); 31 } 32 start()33void start () 34 { 35 _start (); 36 } 37 __main()38extern "C" void __main() { } 39