// { dg-do run } // example from the ARM page 292 and 293 extern "C" int printf(const char *, ...); extern "C" void exit(int); int i = 0; class A { public: A() { printf("Doing A\n"); if (++i != 1) exit(1); } }; class B { public: B() { printf("Doing B\n"); if (++i != 2) exit(1); } }; class C : public virtual A, public virtual B { public: C() { printf("Doing C\n"); if (++i != 3) exit(1); } }; class D : public virtual B, public virtual A { public: D() { printf("Doing D\n"); if (++i != 4) exit(1); } }; class E : public C, public D { public: E() { printf("Doing E\n"); if (++i != 5) exit(1); } } e; int main() { if (++i != 6) exit(1); return 0; }