blob: ac636d06f0a225eaee0323e81a13e2752a836983 [file] [log] [blame]
/* 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;
}