| struct A | |
| { | |
| virtual void foo(); | |
| virtual void bar(); | |
| }; | |
| void A::foo() { } // keep | |
| void A::bar() { } // loose | |
| struct B : public A | |
| { | |
| virtual void foo(); | |
| }; | |
| void B::foo() { } // keep | |
| void _start() __asm__("_start"); // keep | |
| A a; // keep | |
| B b; | |
| A *getme() { return &a; } // keep | |
| void _start() | |
| { | |
| getme()->foo(); | |
| } | |
| // In addition, keep A's virtual table. | |
| // We'll wind up keeping `b' and thus B's virtual table because | |
| // `a' and `b' are both referenced from the constructor function. | |
| extern "C" void __main() { } |