| // { dg-do run } |
| // Make sure we can initialize complex (MI ambiguous) vtables. |
| |
| extern "C" int printf(const char *, ...); |
| |
| struct a |
| { |
| virtual void f() = 0; |
| }; |
| |
| struct b |
| { |
| virtual void g() { } |
| }; |
| |
| struct c: public a, public b |
| { |
| virtual void f(); |
| virtual void g(); |
| }; |
| |
| void c::f() |
| { |
| printf("c::f()\n"); |
| } |
| |
| void c::g() |
| { |
| printf("c::g()\n"); |
| } |
| |
| struct e: public b |
| { |
| }; |
| |
| struct h |
| { |
| }; |
| |
| struct d: public c, public e, public h |
| { |
| virtual void f(); |
| virtual void g(); |
| }; |
| void d::f() |
| { |
| printf("d::f()\n"); |
| } |
| |
| void d::g() |
| { |
| printf("d::g()\n"); |
| } |
| |
| int main(int argc, char* argv[]) |
| { |
| a* tmp = new d; |
| tmp->f(); |
| return 0; |
| } |