/* PR target/59695 */
/* { dg-do run } */
/* { dg-options "-O0" } */

#define  DEFINE_VIRTUALS_FNS(i)	virtual void  xxx##i ()	{} \
  virtual void  foo1_##i ()	{}\
  virtual void  foo2_##i ()	{}\
  virtual void  foo3_##i ()	{}\
  virtual void  foo4_##i ()	{}\
  virtual void  foo5_##i ()	{}\
  virtual void  foo6_##i ()	{}\
  virtual void  foo7_##i ()	{}\
  virtual void  foo8_##i ()	{}\
  virtual void  foo9_##i ()	{}\
  virtual void  foo10_##i ()	{}\
  virtual void  foo11_##i ()	{}\
  virtual void  foo12_##i ()	{}\
  virtual void  foo13_##i ()	{}\
  virtual void  foo14_##i ()	{}\
  virtual void  foo15_##i ()	{}\
  virtual void  foo16_##i ()	{}\
  virtual void  foo17_##i ()	{}\
  virtual void  foo18_##i ()	{}\
  virtual void  foo19_##i ()	{}\
  virtual void  foo20_##i ()	{}\
  virtual void  foo21_##i ()	{}\
  virtual void  foo22_##i ()	{}\

class base_class_2
{

public:
  /* Define lots of virtual functions */
  DEFINE_VIRTUALS_FNS (1)
  DEFINE_VIRTUALS_FNS (2)
  DEFINE_VIRTUALS_FNS (3)
  DEFINE_VIRTUALS_FNS (4)
  DEFINE_VIRTUALS_FNS (5)
  DEFINE_VIRTUALS_FNS (6)
  DEFINE_VIRTUALS_FNS (7)
  DEFINE_VIRTUALS_FNS (8)
  DEFINE_VIRTUALS_FNS (9)
  DEFINE_VIRTUALS_FNS (10)
  DEFINE_VIRTUALS_FNS (11)
  DEFINE_VIRTUALS_FNS (12)
  DEFINE_VIRTUALS_FNS (13)
  DEFINE_VIRTUALS_FNS (14)
  DEFINE_VIRTUALS_FNS (15)
  DEFINE_VIRTUALS_FNS (16)
  DEFINE_VIRTUALS_FNS (17)
  DEFINE_VIRTUALS_FNS (18)
  DEFINE_VIRTUALS_FNS (19)
  DEFINE_VIRTUALS_FNS (20)

  base_class_2();
  virtual ~base_class_2 ();
};

base_class_2::base_class_2()
{
}

base_class_2::~base_class_2 ()
{
}

class base_class_1
{
public:
  virtual ~base_class_1();
  base_class_1();
};

base_class_1::base_class_1()
{
}

base_class_1::~base_class_1()
{
}

class base_Impl_class :
  virtual public base_class_2, public base_class_1
{
public:
  base_Impl_class ();
  virtual ~base_Impl_class ();
};

base_Impl_class::base_Impl_class ()
{
}

base_Impl_class::~base_Impl_class ()
{
}


class test_cls : public base_Impl_class
{
public:
  test_cls();
  virtual ~test_cls();
};

test_cls::test_cls()
{
}

test_cls::~test_cls()
{
}

int main()
{
  test_cls *test = new test_cls;
  base_class_2 *p1 = test;

  /* PR59695  destructor thunk offsets are not setup
   correctly resulting in crash.  */
  delete p1;
  return 0;
}