PR c++/86728 - C variadic generic lambda.
[official-gcc.git] / gcc / testsuite / g++.dg / opt / pr79267.C
blob69dc6cb02518abd2eff61c9f1f62b961b3a66430
1 // PR tree-optimization/79267
2 // { dg-do compile }
3 // { dg-options "-O3" }
5 struct A { A (int); };
6 struct B
8   virtual void av () = 0;
9   void aw ();
10   void h () { av (); aw (); }
12 template <class T> struct G : B
14   T ba;
15   G (int, T) : ba (0) {}
16   void av () { ba (0); }
18 struct I
20   B *bc;
21   template <class j, class T> I (j, T) try { G<T> (0, 0); } catch (...) {}
22   ~I () { bc->h (); }
24 template <class M> struct C { typedef M *i; };
25 template <class M> struct J
27   J ();
28   template <class O, class T> J (O, T p2) : be (0, p2) {}
29   typename C<M>::i operator-> ();
30   I be;
32 struct H : A { H () : A (0) {} };
33 struct D { J<int> d; void q (); };
34 template <typename = int> class bs;
35 int z;
37 void
38 foo (int p1, int *, int)
40   if (p1 == 0)
41     throw H ();
44 D bar ();
45 template <typename T> struct L
47   struct K { K (int); void operator() (int *) { bar ().q (); } };
48   static J<T> bp () { bq (0); return J<T>(); }
49   template <typename br> static void bq (br) { J<T> (0, K (0)); }
51 struct F
53   virtual J<int> x (int) { foo (0, 0, 0); J<bs<> > (L<bs<> >::bp ()); return J<int>(); }
56 void
57 baz ()
59   if (z)
60     {
61       J<F> d, e;
62       d->x (0);
63       e->x (0);
64     }
65   J<F> v, i, j;
66   v->x (0);
67   i->x (0);
68   j->x (0);