|
20 | 20 | // in this shared library, so that they can be overridden by programs |
21 | 21 | // that define non-weak copies of the functions. |
22 | 22 |
|
23 | | -_LIBCPP_WEAK |
24 | | -void * |
25 | | -operator new(std::size_t size) _THROW_BAD_ALLOC |
26 | | -{ |
27 | | - if (size == 0) |
28 | | - size = 1; |
29 | | - void* p; |
30 | | - while ((p = std::malloc(size)) == nullptr) |
31 | | - { |
32 | | - // If malloc fails and there is a new_handler, |
33 | | - // call it to try free up memory. |
34 | | - std::new_handler nh = std::get_new_handler(); |
35 | | - if (nh) |
36 | | - nh(); |
37 | | - else |
38 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
39 | | - throw std::bad_alloc(); |
40 | | -#else |
41 | | - break; |
42 | | -#endif |
| 23 | +_LIBCPP_WEAK void* operator new(std::size_t size) _THROW_BAD_ALLOC { |
| 24 | + if (size == 0) |
| 25 | + size = 1; |
| 26 | + void* p; |
| 27 | + while ((p = std::malloc(size)) == nullptr) { |
| 28 | + // If malloc fails and there is a new_handler, |
| 29 | + // call it to try free up memory. |
| 30 | + std::new_handler nh = std::get_new_handler(); |
| 31 | + if (nh) |
| 32 | + nh(); |
| 33 | + else |
| 34 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 35 | + throw std::bad_alloc(); |
| 36 | +# else |
| 37 | + break; |
| 38 | +# endif |
| 39 | + } |
| 40 | + return p; |
| 41 | +} |
| 42 | + |
| 43 | +_LIBCPP_WEAK void* operator new(size_t size, const std::nothrow_t&) noexcept { |
| 44 | + void* p = nullptr; |
| 45 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 46 | + try { |
| 47 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 48 | + p = ::operator new(size); |
| 49 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 50 | + } catch (...) { |
| 51 | + } |
| 52 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 53 | + return p; |
| 54 | +} |
| 55 | + |
| 56 | +_LIBCPP_WEAK void* operator new[](size_t size) _THROW_BAD_ALLOC { return ::operator new(size); } |
| 57 | + |
| 58 | +_LIBCPP_WEAK void* operator new[](size_t size, const std::nothrow_t&) noexcept { |
| 59 | + void* p = nullptr; |
| 60 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 61 | + try { |
| 62 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 63 | + p = ::operator new[](size); |
| 64 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 65 | + } catch (...) { |
| 66 | + } |
| 67 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 68 | + return p; |
| 69 | +} |
| 70 | + |
| 71 | +_LIBCPP_WEAK void operator delete(void* ptr) noexcept { std::free(ptr); } |
| 72 | + |
| 73 | +_LIBCPP_WEAK void operator delete(void* ptr, const std::nothrow_t&) noexcept { ::operator delete(ptr); } |
| 74 | + |
| 75 | +_LIBCPP_WEAK void operator delete(void* ptr, size_t) noexcept { ::operator delete(ptr); } |
| 76 | + |
| 77 | +_LIBCPP_WEAK void operator delete[](void* ptr) noexcept { ::operator delete(ptr); } |
| 78 | + |
| 79 | +_LIBCPP_WEAK void operator delete[](void* ptr, const std::nothrow_t&) noexcept { ::operator delete[](ptr); } |
| 80 | + |
| 81 | +_LIBCPP_WEAK void operator delete[](void* ptr, size_t) noexcept { ::operator delete[](ptr); } |
| 82 | + |
| 83 | +# if !defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION) |
| 84 | + |
| 85 | +_LIBCPP_WEAK void* operator new(std::size_t size, std::align_val_t alignment) _THROW_BAD_ALLOC { |
| 86 | + if (size == 0) |
| 87 | + size = 1; |
| 88 | + if (static_cast<size_t>(alignment) < sizeof(void*)) |
| 89 | + alignment = std::align_val_t(sizeof(void*)); |
| 90 | + |
| 91 | + // Try allocating memory. If allocation fails and there is a new_handler, |
| 92 | + // call it to try free up memory, and try again until it succeeds, or until |
| 93 | + // the new_handler decides to terminate. |
| 94 | + // |
| 95 | + // If allocation fails and there is no new_handler, we throw bad_alloc |
| 96 | + // (or return nullptr if exceptions are disabled). |
| 97 | + void* p; |
| 98 | + while ((p = std::__libcpp_aligned_alloc(static_cast<std::size_t>(alignment), size)) == nullptr) { |
| 99 | + std::new_handler nh = std::get_new_handler(); |
| 100 | + if (nh) |
| 101 | + nh(); |
| 102 | + else { |
| 103 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 104 | + throw std::bad_alloc(); |
| 105 | +# else |
| 106 | + break; |
| 107 | +# endif |
43 | 108 | } |
44 | | - return p; |
| 109 | + } |
| 110 | + return p; |
45 | 111 | } |
46 | 112 |
|
47 | | -_LIBCPP_WEAK |
48 | | -void* |
49 | | -operator new(size_t size, const std::nothrow_t&) noexcept |
50 | | -{ |
51 | | - void* p = nullptr; |
52 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
53 | | - try |
54 | | - { |
55 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
56 | | - p = ::operator new(size); |
57 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
58 | | - } |
59 | | - catch (...) |
60 | | - { |
61 | | - } |
62 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
63 | | - return p; |
64 | | -} |
65 | | - |
66 | | -_LIBCPP_WEAK |
67 | | -void* |
68 | | -operator new[](size_t size) _THROW_BAD_ALLOC |
69 | | -{ |
70 | | - return ::operator new(size); |
71 | | -} |
72 | | - |
73 | | -_LIBCPP_WEAK |
74 | | -void* |
75 | | -operator new[](size_t size, const std::nothrow_t&) noexcept |
76 | | -{ |
77 | | - void* p = nullptr; |
78 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
79 | | - try |
80 | | - { |
81 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
82 | | - p = ::operator new[](size); |
83 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
84 | | - } |
85 | | - catch (...) |
86 | | - { |
87 | | - } |
88 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
89 | | - return p; |
90 | | -} |
91 | | - |
92 | | -_LIBCPP_WEAK |
93 | | -void |
94 | | -operator delete(void* ptr) noexcept |
95 | | -{ |
96 | | - std::free(ptr); |
97 | | -} |
98 | | - |
99 | | -_LIBCPP_WEAK |
100 | | -void |
101 | | -operator delete(void* ptr, const std::nothrow_t&) noexcept |
102 | | -{ |
103 | | - ::operator delete(ptr); |
104 | | -} |
105 | | - |
106 | | -_LIBCPP_WEAK |
107 | | -void |
108 | | -operator delete(void* ptr, size_t) noexcept |
109 | | -{ |
110 | | - ::operator delete(ptr); |
111 | | -} |
112 | | - |
113 | | -_LIBCPP_WEAK |
114 | | -void |
115 | | -operator delete[] (void* ptr) noexcept |
116 | | -{ |
117 | | - ::operator delete(ptr); |
| 113 | +_LIBCPP_WEAK void* operator new(size_t size, std::align_val_t alignment, const std::nothrow_t&) noexcept { |
| 114 | + void* p = nullptr; |
| 115 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 116 | + try { |
| 117 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 118 | + p = ::operator new(size, alignment); |
| 119 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 120 | + } catch (...) { |
| 121 | + } |
| 122 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 123 | + return p; |
118 | 124 | } |
119 | 125 |
|
120 | | -_LIBCPP_WEAK |
121 | | -void |
122 | | -operator delete[] (void* ptr, const std::nothrow_t&) noexcept |
123 | | -{ |
124 | | - ::operator delete[](ptr); |
| 126 | +_LIBCPP_WEAK void* operator new[](size_t size, std::align_val_t alignment) _THROW_BAD_ALLOC { |
| 127 | + return ::operator new(size, alignment); |
125 | 128 | } |
126 | 129 |
|
127 | | -_LIBCPP_WEAK |
128 | | -void |
129 | | -operator delete[] (void* ptr, size_t) noexcept |
130 | | -{ |
131 | | - ::operator delete[](ptr); |
| 130 | +_LIBCPP_WEAK void* operator new[](size_t size, std::align_val_t alignment, const std::nothrow_t&) noexcept { |
| 131 | + void* p = nullptr; |
| 132 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 133 | + try { |
| 134 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 135 | + p = ::operator new[](size, alignment); |
| 136 | +# ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
| 137 | + } catch (...) { |
| 138 | + } |
| 139 | +# endif // _LIBCPP_HAS_NO_EXCEPTIONS |
| 140 | + return p; |
132 | 141 | } |
133 | 142 |
|
134 | | -#if !defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION) |
135 | | - |
136 | | -_LIBCPP_WEAK |
137 | | -void * |
138 | | -operator new(std::size_t size, std::align_val_t alignment) _THROW_BAD_ALLOC |
139 | | -{ |
140 | | - if (size == 0) |
141 | | - size = 1; |
142 | | - if (static_cast<size_t>(alignment) < sizeof(void*)) |
143 | | - alignment = std::align_val_t(sizeof(void*)); |
144 | | - |
145 | | - // Try allocating memory. If allocation fails and there is a new_handler, |
146 | | - // call it to try free up memory, and try again until it succeeds, or until |
147 | | - // the new_handler decides to terminate. |
148 | | - // |
149 | | - // If allocation fails and there is no new_handler, we throw bad_alloc |
150 | | - // (or return nullptr if exceptions are disabled). |
151 | | - void* p; |
152 | | - while ((p = std::__libcpp_aligned_alloc(static_cast<std::size_t>(alignment), size)) == nullptr) |
153 | | - { |
154 | | - std::new_handler nh = std::get_new_handler(); |
155 | | - if (nh) |
156 | | - nh(); |
157 | | - else { |
158 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
159 | | - throw std::bad_alloc(); |
160 | | -#else |
161 | | - break; |
162 | | -#endif |
163 | | - } |
164 | | - } |
165 | | - return p; |
166 | | -} |
167 | | - |
168 | | -_LIBCPP_WEAK |
169 | | -void* |
170 | | -operator new(size_t size, std::align_val_t alignment, const std::nothrow_t&) noexcept |
171 | | -{ |
172 | | - void* p = nullptr; |
173 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
174 | | - try |
175 | | - { |
176 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
177 | | - p = ::operator new(size, alignment); |
178 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
179 | | - } |
180 | | - catch (...) |
181 | | - { |
182 | | - } |
183 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
184 | | - return p; |
185 | | -} |
186 | | - |
187 | | -_LIBCPP_WEAK |
188 | | -void* |
189 | | -operator new[](size_t size, std::align_val_t alignment) _THROW_BAD_ALLOC |
190 | | -{ |
191 | | - return ::operator new(size, alignment); |
192 | | -} |
193 | | - |
194 | | -_LIBCPP_WEAK |
195 | | -void* |
196 | | -operator new[](size_t size, std::align_val_t alignment, const std::nothrow_t&) noexcept |
197 | | -{ |
198 | | - void* p = nullptr; |
199 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
200 | | - try |
201 | | - { |
202 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
203 | | - p = ::operator new[](size, alignment); |
204 | | -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS |
205 | | - } |
206 | | - catch (...) |
207 | | - { |
208 | | - } |
209 | | -#endif // _LIBCPP_HAS_NO_EXCEPTIONS |
210 | | - return p; |
211 | | -} |
212 | | - |
213 | | -_LIBCPP_WEAK |
214 | | -void |
215 | | -operator delete(void* ptr, std::align_val_t) noexcept |
216 | | -{ |
217 | | - std::__libcpp_aligned_free(ptr); |
218 | | -} |
| 143 | +_LIBCPP_WEAK void operator delete(void* ptr, std::align_val_t) noexcept { std::__libcpp_aligned_free(ptr); } |
219 | 144 |
|
220 | | -_LIBCPP_WEAK |
221 | | -void |
222 | | -operator delete(void* ptr, std::align_val_t alignment, const std::nothrow_t&) noexcept |
223 | | -{ |
224 | | - ::operator delete(ptr, alignment); |
| 145 | +_LIBCPP_WEAK void operator delete(void* ptr, std::align_val_t alignment, const std::nothrow_t&) noexcept { |
| 146 | + ::operator delete(ptr, alignment); |
225 | 147 | } |
226 | 148 |
|
227 | | -_LIBCPP_WEAK |
228 | | -void |
229 | | -operator delete(void* ptr, size_t, std::align_val_t alignment) noexcept |
230 | | -{ |
231 | | - ::operator delete(ptr, alignment); |
| 149 | +_LIBCPP_WEAK void operator delete(void* ptr, size_t, std::align_val_t alignment) noexcept { |
| 150 | + ::operator delete(ptr, alignment); |
232 | 151 | } |
233 | 152 |
|
234 | | -_LIBCPP_WEAK |
235 | | -void |
236 | | -operator delete[] (void* ptr, std::align_val_t alignment) noexcept |
237 | | -{ |
238 | | - ::operator delete(ptr, alignment); |
| 153 | +_LIBCPP_WEAK void operator delete[](void* ptr, std::align_val_t alignment) noexcept { |
| 154 | + ::operator delete(ptr, alignment); |
239 | 155 | } |
240 | 156 |
|
241 | | -_LIBCPP_WEAK |
242 | | -void |
243 | | -operator delete[] (void* ptr, std::align_val_t alignment, const std::nothrow_t&) noexcept |
244 | | -{ |
245 | | - ::operator delete[](ptr, alignment); |
| 157 | +_LIBCPP_WEAK void operator delete[](void* ptr, std::align_val_t alignment, const std::nothrow_t&) noexcept { |
| 158 | + ::operator delete[](ptr, alignment); |
246 | 159 | } |
247 | 160 |
|
248 | | -_LIBCPP_WEAK |
249 | | -void |
250 | | -operator delete[] (void* ptr, size_t, std::align_val_t alignment) noexcept |
251 | | -{ |
252 | | - ::operator delete[](ptr, alignment); |
| 161 | +_LIBCPP_WEAK void operator delete[](void* ptr, size_t, std::align_val_t alignment) noexcept { |
| 162 | + ::operator delete[](ptr, alignment); |
253 | 163 | } |
254 | 164 |
|
255 | | -#endif // !_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION |
| 165 | +# endif // !_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION |
256 | 166 | // ------------------ END COPY ------------------ |
257 | 167 |
|
258 | 168 | #endif // !__GLIBCXX__ && !_LIBCPP_ABI_VCRUNTIME |
0 commit comments