http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34949
--- Comment #29 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-04-04 08:25:08 UTC --- Reduced testcase for -O3: struct E {}; struct A { virtual void a (void *) = 0; }; struct B { virtual ~B () {}; unsigned int b1; E **b2; A *b3; }; struct C : public B { ~C (); }; C::~C () { for (unsigned int i = 0; i < b1; i++) b3->a (b2); } struct D { ~D () {} C d; }; struct F { virtual ~F () {}; }; struct G { void g (); }; struct H : public F { virtual ~H (); D *h1; G *h2; }; H::~H () { h2->g (); delete h1; }