annotate gcc/testsuite/g++.dg/pr57878.C @ 138:fc828634a951

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Nov 2018 14:17:14 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
kono
parents:
diff changeset
2 // { dg-require-effective-target c++11 }
kono
parents:
diff changeset
3 /* { dg-options "-O2 -fno-omit-frame-pointer -fPIC" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 typedef int int32;
kono
parents:
diff changeset
6 typedef long long int64;
kono
parents:
diff changeset
7 typedef unsigned int uint32;
kono
parents:
diff changeset
8 typedef unsigned long long uint64;
kono
parents:
diff changeset
9 namespace std {
kono
parents:
diff changeset
10 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
11 template<class _CharT>
kono
parents:
diff changeset
12 struct char_traits;
kono
parents:
diff changeset
13 template<typename _Tp>
kono
parents:
diff changeset
14 inline _Tp* __addressof(_Tp& __r) noexcept {
kono
parents:
diff changeset
15 return reinterpret_cast<_Tp*> (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
kono
parents:
diff changeset
16 }
kono
parents:
diff changeset
17 template<typename _Tp>
kono
parents:
diff changeset
18 struct remove_reference {
kono
parents:
diff changeset
19 typedef _Tp type;
kono
parents:
diff changeset
20 };
kono
parents:
diff changeset
21 template<typename _Tp>
kono
parents:
diff changeset
22 constexpr _Tp&& forward(typename std::remove_reference<_Tp>::type& __t) noexcept {
kono
parents:
diff changeset
23 return static_cast<_Tp&&>(__t);
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25 }
kono
parents:
diff changeset
26 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
27 extern "C++" {
kono
parents:
diff changeset
28 inline void* operator new(std::size_t, void* __p) noexcept {
kono
parents:
diff changeset
29 return __p;
kono
parents:
diff changeset
30 }
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
kono
parents:
diff changeset
33 template<typename _Tp>
kono
parents:
diff changeset
34 class new_allocator {
kono
parents:
diff changeset
35 public:
kono
parents:
diff changeset
36 typedef size_t size_type;
kono
parents:
diff changeset
37 typedef _Tp* pointer;
kono
parents:
diff changeset
38 };
kono
parents:
diff changeset
39 }
kono
parents:
diff changeset
40 namespace std {
kono
parents:
diff changeset
41 template<typename _Tp>
kono
parents:
diff changeset
42 using __allocator_base = __gnu_cxx::new_allocator<_Tp>;
kono
parents:
diff changeset
43 template<typename _Tp>
kono
parents:
diff changeset
44 class allocator
kono
parents:
diff changeset
45 : public __allocator_base<_Tp> {
kono
parents:
diff changeset
46 public:
kono
parents:
diff changeset
47 typedef size_t size_type;
kono
parents:
diff changeset
48 template<typename _Tp1>
kono
parents:
diff changeset
49 struct rebind {
kono
parents:
diff changeset
50 typedef allocator<_Tp1> other;
kono
parents:
diff changeset
51 };
kono
parents:
diff changeset
52 };
kono
parents:
diff changeset
53 }
kono
parents:
diff changeset
54 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
kono
parents:
diff changeset
55 template<typename _CharT, typename _Traits, typename _Alloc>
kono
parents:
diff changeset
56 class __sso_string_base;
kono
parents:
diff changeset
57 template<typename _CharT, typename _Traits = std::char_traits<_CharT>, typename _Alloc = std::allocator<_CharT>, template <typename, typename, typename> class _Base = __sso_string_base>
kono
parents:
diff changeset
58 class __versa_string;
kono
parents:
diff changeset
59 template<typename _CharT, typename _Traits, typename _Alloc>
kono
parents:
diff changeset
60 struct __vstring_utility {
kono
parents:
diff changeset
61 typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type;
kono
parents:
diff changeset
62 template<typename _Alloc1>
kono
parents:
diff changeset
63 struct _Alloc_hider
kono
parents:
diff changeset
64 : public _Alloc1 {
kono
parents:
diff changeset
65 _Alloc_hider(const _Alloc1& __a, _CharT* __ptr)
kono
parents:
diff changeset
66 : _Alloc1(__a), _M_p(__ptr) {
kono
parents:
diff changeset
67 }
kono
parents:
diff changeset
68 _CharT* _M_p;
kono
parents:
diff changeset
69 };
kono
parents:
diff changeset
70 };
kono
parents:
diff changeset
71 template<typename _CharT, typename _Traits, typename _Alloc>
kono
parents:
diff changeset
72 class __sso_string_base
kono
parents:
diff changeset
73 : protected __vstring_utility<_CharT, _Traits, _Alloc> {
kono
parents:
diff changeset
74 typedef __vstring_utility<_CharT, _Traits, _Alloc> _Util_Base;
kono
parents:
diff changeset
75 typedef typename _Util_Base::_CharT_alloc_type _CharT_alloc_type;
kono
parents:
diff changeset
76 typedef typename _CharT_alloc_type::size_type size_type;
kono
parents:
diff changeset
77 private:
kono
parents:
diff changeset
78 typename _Util_Base::template _Alloc_hider<_CharT_alloc_type>
kono
parents:
diff changeset
79 _M_dataplus;
kono
parents:
diff changeset
80 size_type _M_string_length;
kono
parents:
diff changeset
81 enum {
kono
parents:
diff changeset
82 _S_local_capacity = 15 };
kono
parents:
diff changeset
83 union {
kono
parents:
diff changeset
84 _CharT _M_local_data[_S_local_capacity + 1];
kono
parents:
diff changeset
85 };
kono
parents:
diff changeset
86 template<typename _InIterator>
kono
parents:
diff changeset
87 void _M_construct(_InIterator __beg, _InIterator __end);
kono
parents:
diff changeset
88 public:
kono
parents:
diff changeset
89 size_type _M_max_size() const;
kono
parents:
diff changeset
90 _CharT* _M_data() const {
kono
parents:
diff changeset
91 return _M_dataplus._M_p;
kono
parents:
diff changeset
92 }
kono
parents:
diff changeset
93 size_type _M_length() const {
kono
parents:
diff changeset
94 return _M_string_length;
kono
parents:
diff changeset
95 }
kono
parents:
diff changeset
96 __sso_string_base(const __sso_string_base& __rcs);
kono
parents:
diff changeset
97 const _CharT_alloc_type& _M_get_allocator() const {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
98 static _CharT_alloc_type c;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
99 return c;
111
kono
parents:
diff changeset
100 }
kono
parents:
diff changeset
101 };
kono
parents:
diff changeset
102 template<typename _CharT, typename _Traits, typename _Alloc>
kono
parents:
diff changeset
103 __sso_string_base<_CharT, _Traits, _Alloc>:: __sso_string_base(const __sso_string_base& __rcs)
kono
parents:
diff changeset
104 : _M_dataplus(__rcs._M_get_allocator(), _M_local_data) {
kono
parents:
diff changeset
105 _M_construct(__rcs._M_data(), __rcs._M_data() + __rcs._M_length());
kono
parents:
diff changeset
106 }
kono
parents:
diff changeset
107 template<typename _CharT, typename _Traits, typename _Alloc, template <typename, typename, typename> class _Base>
kono
parents:
diff changeset
108 class __versa_string
kono
parents:
diff changeset
109 : private _Base<_CharT, _Traits, _Alloc> {
kono
parents:
diff changeset
110 };
kono
parents:
diff changeset
111 }
kono
parents:
diff changeset
112 template<typename _CharT, typename _Traits = std::char_traits<_CharT>, typename _Alloc = std::allocator<_CharT> >
kono
parents:
diff changeset
113 class basic_string
kono
parents:
diff changeset
114 : public __gnu_cxx::__versa_string<_CharT, _Traits, _Alloc> {
kono
parents:
diff changeset
115 };
kono
parents:
diff changeset
116 typedef basic_string<char> string;
kono
parents:
diff changeset
117 namespace std __attribute__ ((__visibility__ ("default"))) {
kono
parents:
diff changeset
118 template<typename _Alloc, typename _Tp>
kono
parents:
diff changeset
119 class __alloctr_rebind_helper {
kono
parents:
diff changeset
120 public:
kono
parents:
diff changeset
121 static const bool __value = true;
kono
parents:
diff changeset
122 };
kono
parents:
diff changeset
123 template<typename _Alloc, typename _Tp, bool = __alloctr_rebind_helper<_Alloc, _Tp>::__value>
kono
parents:
diff changeset
124 struct __alloctr_rebind;
kono
parents:
diff changeset
125 template<typename _Alloc, typename _Tp> struct __alloctr_rebind<_Alloc, _Tp, true>
kono
parents:
diff changeset
126 {
kono
parents:
diff changeset
127 typedef typename _Alloc::template rebind<_Tp>::other __type;
kono
parents:
diff changeset
128 };
kono
parents:
diff changeset
129 template<typename _Alloc>
kono
parents:
diff changeset
130 struct allocator_traits {
kono
parents:
diff changeset
131 private:
kono
parents:
diff changeset
132 template<typename _Tp>
kono
parents:
diff changeset
133 static typename _Tp::pointer _S_pointer_helper(_Tp*);
kono
parents:
diff changeset
134 typedef decltype(_S_pointer_helper((_Alloc*)0)) __pointer;
kono
parents:
diff changeset
135 public:
kono
parents:
diff changeset
136 typedef __pointer pointer;
kono
parents:
diff changeset
137 template<typename _Tp>
kono
parents:
diff changeset
138 using rebind_alloc = typename __alloctr_rebind<_Alloc, _Tp>::__type;
kono
parents:
diff changeset
139 };
kono
parents:
diff changeset
140 }
kono
parents:
diff changeset
141 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
kono
parents:
diff changeset
142 template<typename _Alloc> struct __alloc_traits
kono
parents:
diff changeset
143 : std::allocator_traits<_Alloc>
kono
parents:
diff changeset
144 {
kono
parents:
diff changeset
145 typedef std::allocator_traits<_Alloc> _Base_type;
kono
parents:
diff changeset
146 template<typename _Tp>
kono
parents:
diff changeset
147 struct rebind {
kono
parents:
diff changeset
148 typedef typename _Base_type::template rebind_alloc<_Tp>
kono
parents:
diff changeset
149 other;
kono
parents:
diff changeset
150 };
kono
parents:
diff changeset
151 };
kono
parents:
diff changeset
152 }
kono
parents:
diff changeset
153 namespace std __attribute__ ((__visibility__ ("default"))) {
kono
parents:
diff changeset
154 template<typename _T1, typename... _Args>
kono
parents:
diff changeset
155 inline void _Construct(_T1* __p, _Args&&... __args) {
kono
parents:
diff changeset
156 ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...);
kono
parents:
diff changeset
157 }
kono
parents:
diff changeset
158 template<typename _Tp, typename _Alloc>
kono
parents:
diff changeset
159 struct _Vector_base {
kono
parents:
diff changeset
160 typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<_Tp>::other _Tp_alloc_type;
kono
parents:
diff changeset
161 typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer pointer;
kono
parents:
diff changeset
162 struct _Vector_impl
kono
parents:
diff changeset
163 : public _Tp_alloc_type {
kono
parents:
diff changeset
164 pointer _M_start;
kono
parents:
diff changeset
165 pointer _M_finish;
kono
parents:
diff changeset
166 };
kono
parents:
diff changeset
167 public:
kono
parents:
diff changeset
168 _Vector_impl _M_impl;
kono
parents:
diff changeset
169 };
kono
parents:
diff changeset
170 template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
kono
parents:
diff changeset
171 class vector
kono
parents:
diff changeset
172 : protected _Vector_base<_Tp, _Alloc> {
kono
parents:
diff changeset
173 typedef _Vector_base<_Tp, _Alloc> _Base;
kono
parents:
diff changeset
174 public:
kono
parents:
diff changeset
175 typedef _Tp value_type;
kono
parents:
diff changeset
176 typedef typename _Base::pointer pointer;
kono
parents:
diff changeset
177 typedef size_t size_type;
kono
parents:
diff changeset
178 size_type size() const;
kono
parents:
diff changeset
179 void push_back(const value_type& __x) {
kono
parents:
diff changeset
180 _M_emplace_back_aux(__x);
kono
parents:
diff changeset
181 }
kono
parents:
diff changeset
182 template<typename... _Args>
kono
parents:
diff changeset
183 void _M_emplace_back_aux(_Args&&... __args);
kono
parents:
diff changeset
184 size_type _M_check_len();
kono
parents:
diff changeset
185 };
kono
parents:
diff changeset
186 template<typename _Tp, typename _Alloc> template<typename... _Args>
kono
parents:
diff changeset
187 void vector<_Tp, _Alloc>:: _M_emplace_back_aux(_Args&&... __args) {
kono
parents:
diff changeset
188 const size_type __len = _M_check_len();
kono
parents:
diff changeset
189 pointer __new_start(static_cast<pointer>(::operator new(__len * sizeof(_Tp))));
kono
parents:
diff changeset
190 pointer __new_temp(__new_start + size());
kono
parents:
diff changeset
191 ::new((void *)__new_temp) _Tp(std::forward<_Args>(__args)...);
kono
parents:
diff changeset
192 pointer __cur = __new_start;
kono
parents:
diff changeset
193 pointer __first = this->_M_impl._M_start;
kono
parents:
diff changeset
194 pointer __last = this->_M_impl._M_finish;
kono
parents:
diff changeset
195 for (;
kono
parents:
diff changeset
196 __first != __last;
kono
parents:
diff changeset
197 ++__first, ++__cur) std::_Construct(std::__addressof(*__cur), *__first);
kono
parents:
diff changeset
198 }
kono
parents:
diff changeset
199 }
kono
parents:
diff changeset
200 using std::vector;
kono
parents:
diff changeset
201 class DL {
kono
parents:
diff changeset
202 public:
kono
parents:
diff changeset
203 struct ChunkId {
kono
parents:
diff changeset
204 int64 disk_id;
kono
parents:
diff changeset
205 uint64 handle;
kono
parents:
diff changeset
206 uint64 version;
kono
parents:
diff changeset
207 string capability;
kono
parents:
diff changeset
208 ChunkId();
kono
parents:
diff changeset
209 };
kono
parents:
diff changeset
210 struct ChunkInfo {
kono
parents:
diff changeset
211 ChunkId id;
kono
parents:
diff changeset
212 uint64 mtime;
kono
parents:
diff changeset
213 uint32 length;
kono
parents:
diff changeset
214 int32 space_used;
kono
parents:
diff changeset
215 };
kono
parents:
diff changeset
216 };
kono
parents:
diff changeset
217 class FDB {
kono
parents:
diff changeset
218 void CollectChunk(const DL::ChunkInfo& chunk, const int& location);
kono
parents:
diff changeset
219 private:
kono
parents:
diff changeset
220 struct ChunkData {
kono
parents:
diff changeset
221 int location;
kono
parents:
diff changeset
222 DL::ChunkInfo chunk_info;
kono
parents:
diff changeset
223 };
kono
parents:
diff changeset
224 vector<ChunkData> chunk_data_;
kono
parents:
diff changeset
225 };
kono
parents:
diff changeset
226 void FDB::CollectChunk(const DL::ChunkInfo& chunk, const int& location) {
kono
parents:
diff changeset
227 ChunkData chunk_data;
kono
parents:
diff changeset
228 chunk_data_.push_back( chunk_data);
kono
parents:
diff changeset
229 }