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