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

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // PR c++/83720
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-lto-do assemble }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 #pragma GCC diagnostic ignored "-Wreturn-type"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 namespace b {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 class h {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 template <typename ae, typename af> h(ae af::*...) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 [] {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 class ai {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 template <typename> class c {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 template <typename ag> void aj(const char *, ag f) { h(f, int()); }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 template <typename> class al;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 template <typename e> class i {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 protected:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 static e g(const int) { }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 template <typename, typename> class j;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 template <typename an, typename e, typename... ao>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 class j<an(ao...), e> : i<e> {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 typedef i<e> ap;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 static an aq(const int &ar, ao... as) { ap::g(ar)(as...); }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 template <typename an, typename... ao> class al<an(ao...)> {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 template <typename, typename a> using ax = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 template <typename e, typename = ax<int, void>, typename = ax<int, void>>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 al(e);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 using ay = an (*)(const int &, ao...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 ay az;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 template <typename an, typename... ao>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 template <typename e, typename, typename>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 al<an(ao...)>::al(e) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 az = j<an(ao...), e>::aq;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 class k {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 k(al<void(b::ai)>);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 } d([](b::ai) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 struct be {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 virtual void f();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 struct bf;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 b::c<bf>().aj("", &be::f);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 });