// { dg-do run  }
extern "C" int printf(const char *, ...);
void *vp;
int fail = 0;

class Foo {
public:
   virtual void setName() {
     /* APPLE LOCAL default to Wformat-security 5764921 */
     printf("Foo at %p\n", (void*)this);
     if (vp != (void*)this)
       fail = 1;
   }
};

class Bar : public Foo {
public:
  virtual void init(int argc, char **argv) {
    /* APPLE LOCAL default to Wformat-security 5764921 */
    printf("Bar's Foo at %p\n", (void*)(Foo*)this);
    vp = (void*)(Foo*)this;
    setName();
  }
};

class Barf : virtual public Bar {
public:
  virtual void init(int argc, char **argv) { Bar::init(argc, argv); }
};

class Baz : virtual public Bar, virtual public Barf {
public:
  virtual void init(int argc, char **argv) { Barf::init(argc, argv); }
};

Bar *theBar = new Baz();

int main(int argc, char **argv) {
   theBar->init(argc, argv);
   return fail;
}
