annotate gcc/testsuite/g++.dg/torture/pr53011.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 // { dg-do compile }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 // { dg-additional-options "-Wno-return-type" }
111
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 extern "C" class WvFastString;
kono
parents:
diff changeset
5 typedef WvFastString& WvStringParm;
kono
parents:
diff changeset
6 struct WvFastString {
kono
parents:
diff changeset
7 ~WvFastString();
kono
parents:
diff changeset
8 operator char* () {}
kono
parents:
diff changeset
9 };
kono
parents:
diff changeset
10 class WvString : WvFastString {};
kono
parents:
diff changeset
11 class WvAddr {};
kono
parents:
diff changeset
12 class WvIPAddr : WvAddr {};
kono
parents:
diff changeset
13 struct WvIPNet : WvIPAddr {
kono
parents:
diff changeset
14 bool is_default() {}
kono
parents:
diff changeset
15 };
kono
parents:
diff changeset
16 template<class T, bool> struct WvTraits_Helper {
kono
parents:
diff changeset
17 static void release(T *obj) {
kono
parents:
diff changeset
18 delete obj;
kono
parents:
diff changeset
19 }
kono
parents:
diff changeset
20 };
kono
parents:
diff changeset
21 template<class From> struct WvTraits {
kono
parents:
diff changeset
22 static void release(From *obj) {
kono
parents:
diff changeset
23 WvTraits_Helper<From, 0>::release(obj);
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25 };
kono
parents:
diff changeset
26 struct WvLink {
kono
parents:
diff changeset
27 void *data;
kono
parents:
diff changeset
28 WvLink *next;
kono
parents:
diff changeset
29 bool autofree;
kono
parents:
diff changeset
30 WvLink(bool, int) : autofree() {}
kono
parents:
diff changeset
31 bool get_autofree() {}
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 void unlink() {
kono
parents:
diff changeset
34 delete this;
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36 };
kono
parents:
diff changeset
37 struct WvListBase {
kono
parents:
diff changeset
38 WvLink head, *tail;
kono
parents:
diff changeset
39 WvListBase() : head(0, 0) {}
kono
parents:
diff changeset
40 };
kono
parents:
diff changeset
41 template<class T> struct WvList : WvListBase {
kono
parents:
diff changeset
42 ~WvList() {
kono
parents:
diff changeset
43 zap();
kono
parents:
diff changeset
44 }
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 void zap(bool destroy = 1) {
kono
parents:
diff changeset
47 while (head.next) unlink_after(&head, destroy);
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 void unlink_after(WvLink *after, bool destroy) {
kono
parents:
diff changeset
51 WvLink *next = 0;
kono
parents:
diff changeset
52 T *obj = (destroy && next->get_autofree()) ?
kono
parents:
diff changeset
53 static_cast<T*>(next->data) : 0;
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 if (tail) tail = after;
kono
parents:
diff changeset
56 next->unlink();
kono
parents:
diff changeset
57 WvTraits<T>::release(obj);
kono
parents:
diff changeset
58 }
kono
parents:
diff changeset
59 };
kono
parents:
diff changeset
60 typedef WvList<WvString>WvStringListBase;
kono
parents:
diff changeset
61 class WvStringList : WvStringListBase {};
kono
parents:
diff changeset
62 class WvSubProc {
kono
parents:
diff changeset
63 WvStringList last_args, env;
kono
parents:
diff changeset
64 };
kono
parents:
diff changeset
65 void addroute(WvIPNet& dest, WvStringParm table) {
kono
parents:
diff changeset
66 if (dest.is_default() || (table != "default")) WvSubProc checkProc;
kono
parents:
diff changeset
67 }