1 // { dg-do run  }
2 extern "C" int printf(const char *, ...);
3 void *vp;
4 int fail = 0;
5 
6 class Foo {
7 public:
setName()8    virtual void setName() {
9      printf("Foo at %x\n", this);
10      if (vp != (void*)this)
11        fail = 1;
12    }
13 };
14 
15 class Bar : public Foo {
16 public:
init(int argc,char ** argv)17   virtual void init(int argc, char **argv) {
18     printf("Bar's Foo at %x\n", (Foo*)this);
19     vp = (void*)(Foo*)this;
20     setName();
21   }
22 };
23 
24 class Barf : virtual public Bar {
25 public:
init(int argc,char ** argv)26   virtual void init(int argc, char **argv) { Bar::init(argc, argv); }
27 };
28 
29 class Baz : virtual public Bar, virtual public Barf {
30 public:
init(int argc,char ** argv)31   virtual void init(int argc, char **argv) { Barf::init(argc, argv); }
32 };
33 
34 Bar *theBar = new Baz();
35 
main(int argc,char ** argv)36 int main(int argc, char **argv) {
37    theBar->init(argc, argv);
38    return fail;
39 }
40