blob: 9573663afca2466c752d86da27ec9cce9d2e37c8 [file] [log] [blame]
// PR tree-optimization/57661
// { dg-do compile { target c++11 } }
// { dg-options "-O2 -fno-tree-forwprop" }
template <typename>
struct A
{
~A () {}
};
template <typename _Tp>
using B = A <_Tp>;
template <typename _Tp>
class C : B <_Tp> {};
namespace N { enum D { d }; }
template <class>
struct E
{
~E ();
};
template <class, class V>
struct F : V {};
template <class U, class V>
struct G : F <U, V>
{
N::D g1;
void g2 ();
void g3 ();
void g4 () { g3 (); }
static void g5 (G *__t) { __t->g4 (); }
};
template <class U, class V>
struct H : G <U, V>
{
E <U> *h1;
bool h2;
~H () throw ()
{
this->g2 ();
if (h2)
delete h1;
}
};
template <class U, class V>
struct I : H <U, V>, E <U>
{
G <U, V> *i;
~I () throw ()
{
i->g4 ();
}
};
struct J
{
typedef C <char> j1;
typedef G <char, C <char>> j2;
J ();
j2 *j3;
};
struct K : J
{
typedef G <char, C <char>> j2;
K () { j2::g5 (this->j3); }
};
template <class U, class V>
void G <U, V>::g3 ()
{
switch (g1)
{
case N::d:
{
I <U, V> *q = (I <U, V> *) this;
q->I <U, V>::~I ();
}
}
}
K r;