// { dg-do run } // GROUPS passed destructors // Check that when an object of a derived class is (implicitly) // destructed (on exit from the block in which it is declared) // that the destructor for the base class also gets executed. // // (also check that this execution doesn't seg-fault) extern "C" int printf (const char *, ...); int derived_destructed; int base_destructed; struct base { int base_data_member; base() { base_data_member = 0x5e5e; } ~base() { base_destructed = 0x781f; } }; struct derived : public base { int derived_data_member; derived() { derived_data_member = 0xe5e5; } ~derived() { derived_destructed = 0xf178; } }; void test2 (); int main () { test2 (); if ((base_destructed != 0x781f) || (derived_destructed != 0xf178)) { printf ("FAIL\n"); return 1; } else printf ("PASS\n"); } void test2 () { derived derived_object; derived_object.derived_data_member = 99; }