comparison gcc/testsuite/g++.dg/opt/pr85196.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
comparison
equal deleted inserted replaced
111:04ced10e8804 131:84e7813d76e9
1 // PR target/85196
2 // Testcase by Rainer Orth <ro@gcc.gnu.org>
3
4 // { dg-do compile }
5 // { dg-options "-O -fpermissive -w" }
6 // { dg-additional-options "-fPIC" { target fpic } }
7
8 class a;
9 template <typename> class b;
10 template <typename k> class d : public b<k> {};
11 class e {};
12 void f(int);
13 template <class> class g {
14 public:
15 h();
16 a i();
17 };
18 template <> class b<e> : public g<e> {};
19 typedef (*j)(d<e>);
20 template <class k> class l {
21 public:
22 k operator->() { return 0; }
23 };
24 enum m { n, aa, o, ab, q, p };
25 inline s(m ac) {
26 switch (ac) {
27 case n:
28 case aa:
29 case p:
30 return 1;
31 case o:
32 case ab:
33 return 2;
34 }
35 }
36 class D {
37 int ad;
38
39 public:
40 *ae() { return &ad; }
41 };
42 class a {
43 l<D *> af;
44
45 public:
46 *r() { return af->ae(); }
47 t(int *c) {
48 int *w = af->ae();
49 return w == c;
50 }
51 };
52 class F : a {
53 public:
54 static int ah[];
55 static e v(F *);
56 unsigned long ai() const;
57 };
58 inline unsigned long F::ai() const {
59 m aj = r() - &ah[0];
60 return s(aj);
61 }
62 inline e F::v(F *ak) {
63 long al = ak->ai();
64 f(al);
65 }
66 template <typename> am() { return q; }
67 class an : public F {
68 public:
69 static ao(d<e> u) {
70 int *ap;
71 m aq = am<unsigned>();
72 ap = &ah[aq];
73 return u.h() && u.i().t(ap);
74 }
75 template <e ar(F *)> static as() {
76 F at;
77 ar(&at);
78 }
79 template <e ar(F *)> static au(int *, unsigned, e *) {
80 j av = ao;
81 d<e> aw;
82 if (av(aw))
83 as<ar>();
84 }
85 };
86 int *ax;
87 int ay;
88 e az;
89 ba() { an::au<an::v>(ax, ay, &az); }