// { dg-do run  }
// { dg-options "-w -ansi -pedantic-errors" }

// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 20 June 2000 <nathan@codesourcery.com>

// Origin GNATS bug report 143 from Carlo Wood <carlo@runaway.xs4all.nl>
// We were generating incorrect type_info structures, and hence breaking
// dynamic_cast.

#include <stdio.h>

class OBASE { public: virtual void bz () {}};
class IBASE { public: virtual void by () {}};

class V {public:int m; };

class A : public virtual V { };
class AA : public A {};

class B : public OBASE, public A { public: virtual void foo(void) { } };
class B1 : public OBASE, public AA { public: virtual void foo(void) { } };

class C : public IBASE, public virtual V { };

class D : public B, public C { };

class E : public B, public virtual V { };

class E1 : public B1, public virtual V {};

class E2 : public B1, public A, public virtual V {};

int main(void)
{
  D d;
  E e;
  E1 e1;
  E2 e2;
  int code = 0;

  OBASE* osd = &d;
  OBASE* ose = &e;
  OBASE* ose1 = &e1;
  OBASE* ose2 = &e2;


  if (!dynamic_cast<V*>(osd))
    {
      printf ("fail osd\n");
      code++;
    }
  
  if (!dynamic_cast<V*>(ose))
    {
      printf ("fail ose\n");
      code++;
    }

  if (!dynamic_cast<V*>(ose1))
    {
      printf ("fail ose1\n");
      code++;
    }

  if (!dynamic_cast<V*>(ose2))
    {
      printf ("fail ose2\n");
      code++;
    }

  return code;
}
