annotate gcc/testsuite/g++.old-deja/g++.mike/p2746.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 assemble }
kono
parents:
diff changeset
2 // GROUPS passed scope pt
kono
parents:
diff changeset
3 class Link {
kono
parents:
diff changeset
4 public:
kono
parents:
diff changeset
5 Link();
kono
parents:
diff changeset
6 Link(Link *);
kono
parents:
diff changeset
7 private:
kono
parents:
diff changeset
8 Link *next_;
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 friend class IListBase;
kono
parents:
diff changeset
11 friend class IListIterBase;
kono
parents:
diff changeset
12 };
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 inline
kono
parents:
diff changeset
15 Link::Link() : next_(0)
kono
parents:
diff changeset
16 {
kono
parents:
diff changeset
17 }
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 inline
kono
parents:
diff changeset
20 Link::Link(Link *next) : next_(next)
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 }
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 class IListBase {
kono
parents:
diff changeset
25 public:
kono
parents:
diff changeset
26 IListBase();
kono
parents:
diff changeset
27 IListBase(Link *);
kono
parents:
diff changeset
28 void append(Link *);
kono
parents:
diff changeset
29 void insert(Link *);
kono
parents:
diff changeset
30 Link *head();
kono
parents:
diff changeset
31 int empty();
kono
parents:
diff changeset
32 Link *get();
kono
parents:
diff changeset
33 void remove(Link *);
kono
parents:
diff changeset
34 private:
kono
parents:
diff changeset
35 Link *head_;
kono
parents:
diff changeset
36 friend class IListIterBase;
kono
parents:
diff changeset
37 };
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 inline
kono
parents:
diff changeset
40 IListBase::IListBase() : head_(0)
kono
parents:
diff changeset
41 {
kono
parents:
diff changeset
42 }
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 inline
kono
parents:
diff changeset
45 IListBase::IListBase(Link *head) : head_(head)
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 }
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 inline
kono
parents:
diff changeset
50 void IListBase::insert(Link *p)
kono
parents:
diff changeset
51 {
kono
parents:
diff changeset
52 p->next_ = head_;
kono
parents:
diff changeset
53 head_ = p;
kono
parents:
diff changeset
54 }
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 inline
kono
parents:
diff changeset
57 Link *IListBase::head()
kono
parents:
diff changeset
58 {
kono
parents:
diff changeset
59 return head_;
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 inline
kono
parents:
diff changeset
63 int IListBase::empty()
kono
parents:
diff changeset
64 {
kono
parents:
diff changeset
65 return head_ == 0;
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 inline
kono
parents:
diff changeset
69 Link *IListBase::get()
kono
parents:
diff changeset
70 {
kono
parents:
diff changeset
71 Link *tem = head_;
kono
parents:
diff changeset
72 head_ = head_->next_;
kono
parents:
diff changeset
73 return tem;
kono
parents:
diff changeset
74 }
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 template<class T> class IListIter;
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 template<class T>
kono
parents:
diff changeset
79 class IList : private IListBase {
kono
parents:
diff changeset
80 public:
kono
parents:
diff changeset
81 IList() { }
kono
parents:
diff changeset
82 IList(T *p) : IListBase(p) { }
kono
parents:
diff changeset
83 ~IList();
kono
parents:
diff changeset
84 void append(T *p) { IListBase::append(p); }
kono
parents:
diff changeset
85 void insert(T *p) { IListBase::insert(p); }
kono
parents:
diff changeset
86 void remove(T *p) { IListBase::remove(p); }
kono
parents:
diff changeset
87 T *head() { return (T *)IListBase::head(); }
kono
parents:
diff changeset
88 T *get() { return (T *)IListBase::get(); }
kono
parents:
diff changeset
89 IListBase::empty; // { dg-warning "deprecated" }
kono
parents:
diff changeset
90 friend class IListIter<T>;
kono
parents:
diff changeset
91 };
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 template<class T>
kono
parents:
diff changeset
94 IList<T>::~IList()
kono
parents:
diff changeset
95 {
kono
parents:
diff changeset
96 while (!empty())
kono
parents:
diff changeset
97 delete get();
kono
parents:
diff changeset
98 }
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 class IListIterBase {
kono
parents:
diff changeset
101 public:
kono
parents:
diff changeset
102 IListIterBase(const IListBase &);
kono
parents:
diff changeset
103 int done();
kono
parents:
diff changeset
104 Link *cur();
kono
parents:
diff changeset
105 void next();
kono
parents:
diff changeset
106 private:
kono
parents:
diff changeset
107 Link *p_;
kono
parents:
diff changeset
108 };
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110 inline
kono
parents:
diff changeset
111 IListIterBase::IListIterBase(const IListBase &list) : p_(list.head_)
kono
parents:
diff changeset
112 {
kono
parents:
diff changeset
113 }
kono
parents:
diff changeset
114
kono
parents:
diff changeset
115 inline
kono
parents:
diff changeset
116 int IListIterBase::done()
kono
parents:
diff changeset
117 {
kono
parents:
diff changeset
118 return p_ == 0;
kono
parents:
diff changeset
119 }
kono
parents:
diff changeset
120
kono
parents:
diff changeset
121 inline
kono
parents:
diff changeset
122 Link *IListIterBase::cur()
kono
parents:
diff changeset
123 {
kono
parents:
diff changeset
124 return p_;
kono
parents:
diff changeset
125 }
kono
parents:
diff changeset
126
kono
parents:
diff changeset
127 inline
kono
parents:
diff changeset
128 void IListIterBase::next()
kono
parents:
diff changeset
129 {
kono
parents:
diff changeset
130 p_ = p_->next_;
kono
parents:
diff changeset
131 }
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133
kono
parents:
diff changeset
134 template<class T>
kono
parents:
diff changeset
135 class IListIter : private IListIterBase {
kono
parents:
diff changeset
136 public:
kono
parents:
diff changeset
137 IListIter(const IList<T> &list) : IListIterBase(list) { }
kono
parents:
diff changeset
138 T *cur() { return (T *)IListIterBase::cur(); }
kono
parents:
diff changeset
139 IListIterBase::next; // { dg-warning "deprecated" }
kono
parents:
diff changeset
140 IListIterBase::done; // { dg-warning "deprecated" }
kono
parents:
diff changeset
141 };
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 struct A {
kono
parents:
diff changeset
145 IList<Link> list;
kono
parents:
diff changeset
146 int x;
kono
parents:
diff changeset
147 void foo();
kono
parents:
diff changeset
148 };
kono
parents:
diff changeset
149
kono
parents:
diff changeset
150
kono
parents:
diff changeset
151 void A::foo()
kono
parents:
diff changeset
152 {
kono
parents:
diff changeset
153 for (IListIter<Link> iter(list); !iter.done(); iter.next())
kono
parents:
diff changeset
154 ;
kono
parents:
diff changeset
155 x = 0;
kono
parents:
diff changeset
156 }