annotate gcc/testsuite/g++.dg/lto/pr69589_1.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 struct A;
kono
parents:
diff changeset
2 template <class T>
kono
parents:
diff changeset
3 struct Q { Q (T); };
kono
parents:
diff changeset
4 template<typename T, class D>
kono
parents:
diff changeset
5 struct U {
kono
parents:
diff changeset
6 ~U () { m1 (nullptr); }
kono
parents:
diff changeset
7 D m2 ();
kono
parents:
diff changeset
8 T *u;
kono
parents:
diff changeset
9 void m1 (T *) { m2 () (u); }
kono
parents:
diff changeset
10 };
kono
parents:
diff changeset
11 struct F { F (int *); };
kono
parents:
diff changeset
12 template <class, class T = F>
kono
parents:
diff changeset
13 using W = Q<T>;
kono
parents:
diff changeset
14 int a, b;
kono
parents:
diff changeset
15 void fn1 (void *);
kono
parents:
diff changeset
16 template <class T>
kono
parents:
diff changeset
17 void
kono
parents:
diff changeset
18 fn2 (T *x)
kono
parents:
diff changeset
19 {
kono
parents:
diff changeset
20 if (x)
kono
parents:
diff changeset
21 x->~T();
kono
parents:
diff changeset
22 fn1 (x);
kono
parents:
diff changeset
23 }
kono
parents:
diff changeset
24 template <typename T>
kono
parents:
diff changeset
25 struct C {
kono
parents:
diff changeset
26 void operator() (T *x) { fn2 (x); }
kono
parents:
diff changeset
27 };
kono
parents:
diff changeset
28 struct D;
kono
parents:
diff changeset
29 template <typename T, typename D = C<T> >
kono
parents:
diff changeset
30 using V = U<T, D>;
kono
parents:
diff changeset
31 struct A {
kono
parents:
diff changeset
32 A (int *);
kono
parents:
diff changeset
33 };
kono
parents:
diff changeset
34 struct S;
kono
parents:
diff changeset
35 struct G {
kono
parents:
diff changeset
36 V<S> m3 ();
kono
parents:
diff changeset
37 };
kono
parents:
diff changeset
38 struct S {
kono
parents:
diff changeset
39 int e;
kono
parents:
diff changeset
40 virtual ~S () {}
kono
parents:
diff changeset
41 };
kono
parents:
diff changeset
42 template<typename T>
kono
parents:
diff changeset
43 struct H {
kono
parents:
diff changeset
44 H (int, T x, int) : h(x) {}
kono
parents:
diff changeset
45 G g;
kono
parents:
diff changeset
46 void m4 () { g.m3 (); }
kono
parents:
diff changeset
47 T h;
kono
parents:
diff changeset
48 };
kono
parents:
diff changeset
49 struct I {
kono
parents:
diff changeset
50 I(A, W<D>);
kono
parents:
diff changeset
51 };
kono
parents:
diff changeset
52 void
kono
parents:
diff changeset
53 test ()
kono
parents:
diff changeset
54 {
kono
parents:
diff changeset
55 A c (&b);
kono
parents:
diff changeset
56 W<D> d (&b);
kono
parents:
diff changeset
57 I e (c, d);
kono
parents:
diff changeset
58 H<I> f (0, e, a);
kono
parents:
diff changeset
59 f.m4 ();
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61