Mercurial > hg > CbC > CbC_gcc
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); } |