blob: 8cf4fd0b421f865c5e5271f8afafd4b427ca9da1 [file] [log] [blame]
// PR rtl-optimization/91164
// { dg-do compile { target c++11 } }
// { dg-options "-O2 -fdelete-dead-exceptions -fnon-call-exceptions -fno-rerun-cse-after-loop -fno-tree-forwprop" }
template <typename, typename = int> class b;
template <int v> struct d { static constexpr int e = v; };
template <bool, typename f> using g = f;
struct h { template <typename i> using j = i; };
template <typename, typename f> using k = h::j<f>;
void *operator new(__SIZE_TYPE__, void *);
struct l { l(); };
struct m;
template <typename n> n aa(m);
struct o { template <typename> using ab = l; };
template <typename, typename> struct b {
struct q : o::ab<int> { q(int, l = l()) : p() {} int p; } ac;
void ad();
b() : ac(0) {}
~b() { bool r = ac.p == 0; if (r) ad(); }
const wchar_t *ae();
};
struct m {};
struct t { virtual void f(); };
struct u { l a; };
struct af : t {
struct ag { ag(l); };
af(l ah) : ai(ah) {}
ag ai;
};
struct w {
template <typename f, typename x> w(f, x y) { new (0) af(y.a); }
};
struct z {
using aj = int;
template <typename x> z(x ah) : ak(al, ah) {}
aj al;
w ak;
};
struct am : z { template <typename x> am(x ah) : z(ah) {} };
template <typename, typename x> am an(x) { return u{}; }
template <typename> am ao() { return an<int>(l()); }
struct ap {
k<int, int> aq;
k<int, int> ar;
k<int, int> as;
};
struct at { ap a; long au; ap av; ap aw; };
struct ax { at c; ax() : c() {} };
enum ay : int;
ay az, ba;
struct bb { bb(wchar_t *, wchar_t *, ay, m); };
template <typename bc> struct bd {
typedef typename bc::be *bf;
bd(bf, bf, const typename bc::bg &, ay);
ay bh;
bb bi;
am bj;
typename bc::bk e;
ax bl;
int bm;
};
template <typename, typename> using bn = g<d<false>::e, am>;
template <typename bc>
bd<bc>::bd(bf ah, bf y, const typename bc::bg &bu, ay)
: bi(ah, y, bh, bu), bj(ao<bc>()), bm(aa<int>(bu)) {}
struct bt { typedef wchar_t be; typedef b<be> bk; typedef m bg; };
template <typename bc, typename bo> bn<bo, bc> bar();
template <typename bc, typename bo> bn<bo, bc> bq(bo) {
typename bc::bg bp;
auto bs = nullptr;
using br = bd<bc>;
br(bs, bs, bp, ba);
return bar<bc, bo>();
}
struct bw {
bw();
template <typename bv, typename x> void assign(b<bv, x> ah) {
const wchar_t by = *ah.ae();
bw(&by, ah.ae(), bp, az);
}
template <typename bo> bw(bo, bo y, m, ay) : automaton(bq<bt>(y)) {}
m bp;
am automaton;
};
void bx() {
b<wchar_t> s;
bw ca;
ca.assign(s);
}